SQL Exception: "Sudah ada DataReader terbuka yang dikaitkan dengan Sambungan ini yang mesti ditutup dahulu"
Pengecualian ini berlaku apabila DataReader masih terbuka semasa cuba melaksanakan perintah SQL lain pada sambungan yang sama. Begini cara untuk menyelesaikan isu berdasarkan kod yang diberikan:
Dalam kod anda, anda membuka DataReader menggunakan kaedah ExecuteReader() dan kemudian cuba untuk melaksanakan arahan lain menggunakan ExecuteNonQuery(). Ini tidak dibenarkan kerana DataReader memegang kunci pada sambungan. Untuk menyelesaikan isu ini, tutup DataReader sebelum melaksanakan sebarang arahan tambahan.
SQL = "Select * from tblProduct"; //Create Connection/Command/MySQLDataReader MySqlConnection myConnection = new MySqlConnection(cf.GetConnectionString()); myConnection.Open(); MySqlCommand myCommand = new MySqlCommand(SQL, myConnection); MySqlDataReader myReader = myCommand.ExecuteReader(); myCommand.Dispose(); 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); // Close the DataReader before executing the new command myReader.Close(); cmdInserttblProductFrance.ExecuteNonQuery(); // Now this will execute successfully } } }
Selepas menutup DataReader, anda boleh melaksanakan perintah cmdInserttblProductFrance tanpa menemui "Sudah ada DataReader terbuka yang dikaitkan dengan Sambungan ini yang mesti ditutup dahulu".
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'Sudah ada DataReader terbuka...\' Pengecualian SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!