Rumah >pangkalan data >tutorial mysql >Mengapakah \'DataReader Mesti Ditutup Dahulu\' Berlaku, dan Bagaimana Saya Boleh Menyelesaikannya?
Pengecualian Pengurusan Data: Memahami dan Menyelesaikan Ralat "DataReader Mesti Ditutup Dahulu"
Dalam kod yang disediakan, anda cuba melaksanakan yang baharu Kenyataan SQL menggunakan ExecuteNonQuery() manakala DataReader masih dibuka untuk sambungan yang sama. Ini menimbulkan pengecualian, "Sudah ada DataReader terbuka yang dikaitkan dengan Sambungan ini yang mesti ditutup terlebih dahulu."
Menurut MSDN, pengecualian ini berlaku kerana apabila DataReader dibuka, sambungan yang digunakannya dikunci secara eksklusif untuk tempoh penggunaannya. Ini bermakna tiada arahan lain, termasuk mencipta DataReader baharu, boleh dilaksanakan untuk sambungan itu sehingga DataReader asal ditutup.
Untuk menyelesaikan ralat ini, anda harus memastikan bahawa DataReader ditutup sebelum cuba melaksanakan mana-mana yang lain arahan pada sambungan yang sama. Dalam kod yang disediakan, ini boleh dicapai dengan menambahkan panggilan ke myReader.Close() sejurus sebelum baris yang membuang pengecualian:
myCommand.Dispose(); myReader.Close(); // Close DataReader if (myReader.HasRows) { int i = 0; // Always call Read before accessing data. while (myReader.Read()) { if (myReader["frProductid"].ToString() == "") //there is no productid exist for this item { strInsertSQL = "Insert Into tblProduct_temp (Productid) Values('this istest') "; MySqlCommand cmdInserttblProductFrance = new MySqlCommand(strInsertSQL, myConnection); cmdInserttblProductFrance.ExecuteNonQuery(); // ExecuteNonQuery after closing DataReader } } }
Dengan menutup DataReader sebelum melaksanakan perintah ExecuteNonQuery(), anda lepaskan kunci eksklusif pada sambungan dan benarkan arahan baharu dilaksanakan dengan jayanya.
Atas ialah kandungan terperinci Mengapakah \'DataReader Mesti Ditutup Dahulu\' Berlaku, dan Bagaimana Saya Boleh Menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!