Rumah >pangkalan data >tutorial mysql >Mengapakah \'DataReader Mesti Ditutup Dahulu\' Berlaku, dan Bagaimana Saya Boleh Menyelesaikannya?

Mengapakah \'DataReader Mesti Ditutup Dahulu\' Berlaku, dan Bagaimana Saya Boleh Menyelesaikannya?

Patricia Arquette
Patricia Arquetteasal
2024-11-30 11:24:13840semak imbas

Why Does

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn