SQL 异常:“已经有一个与此连接关联的打开的 DataReader,必须首先关闭”
当 DataReader 时发生此异常尝试在同一连接上执行另一个 SQL 命令时仍然打开。以下是根据给定代码解决问题的方法:
在代码中,您使用 ExecuteReader() 方法打开 DataReader,然后尝试使用 ExecuteNonQuery() 执行另一个命令。这是不允许的,因为 DataReader 持有连接上的锁。要解决此问题,请在执行任何其他命令之前关闭 DataReader。
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 } } }
关闭 DataReader 后,您可以执行 cmdInserttblProductFrance 命令,而不会遇到“已经有一个与此连接关联的打开的 DataReader 必须先关闭”异常。
以上是如何解决'已经有一个打开的 DataReader...”SQL 异常?的详细内容。更多信息请关注PHP中文网其他相关文章!