SQL-Ausnahme: „Dieser Verbindung ist bereits ein geöffneter DataReader zugeordnet, der zuerst geschlossen werden muss“
Diese Ausnahme tritt auf, wenn ein DataReader ist noch geöffnet, während versucht wird, einen anderen SQL-Befehl auf derselben Verbindung auszuführen. So lösen Sie das Problem basierend auf dem angegebenen Code:
In Ihrem Code öffnen Sie einen DataReader mit der ExecuteReader()-Methode und versuchen dann, einen anderen Befehl mit ExecuteNonQuery() auszuführen. Dies ist nicht zulässig, da der DataReader die Verbindung sperrt. Um dieses Problem zu beheben, schließen Sie den DataReader, bevor Sie weitere Befehle ausführen.
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 } } }
Nach dem Schließen des DataReader können Sie den Befehl cmdInserttblProductFrance ausführen, ohne auf die Meldung „Dieser Verbindung ist bereits ein offener DataReader zugeordnet, der vorhanden sein muss zuerst geschlossen werden“-Ausnahme.
Das obige ist der detaillierte Inhalt vonWie löse ich die SQL-Ausnahme „Es ist bereits ein geöffneter DataReader…' auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!