ホームページ >データベース >mysql チュートリアル >「この接続に関連付けられた開いている DataReader がすでに存在するため、最初に閉じる必要があります」というメッセージが表示されるのはなぜですか?
トラブルシューティング「この接続に関連付けられた開いている DataReader がすでに存在するため、最初に閉じる必要があります」
コード内で、次のことを試みています。データ リーダーがまだ開いている間に別の SQL ステートメント (「Into tblProduct_temp」) を実行すると、次の例外が発生します。この接続に関連付けられた開いている DataReader がすでに存在しているため、最初に閉じる必要があります。
理由:
データ リーダーが接続されている場合、MySQL 接続は接続リソースの排他ロックを維持します。開ける。これにより、データ リーダーが閉じられるまで、他の操作が接続にアクセスできなくなります。
解決策:
この問題を解決するには、新しいコマンドを実行する前にデータ リーダーを閉じる必要があります。 SQL ステートメント。これを行うための推奨される方法は、using ステートメントまたは try-finally ブロックを使用して、例外が発生した場合でもリーダーが適切に閉じられるようにすることです。
using ステートメントを使用した修正されたコードは次のとおりです。
using (MySqlConnection myConnection = new MySqlConnection(cf.GetConnectionString())) { myConnection.Open(); using (MySqlCommand myCommand = new MySqlCommand(SQL, myConnection)) { using (MySqlDataReader myReader = myCommand.ExecuteReader()) { if (myReader.HasRows) { int i = 0; while (myReader.Read()) { if (myReader["frProductid"].ToString() == "") { strInsertSQL = "Insert Into tblProduct_temp (Productid) Values('this istest') "; using (MySqlCommand cmdInserttblProductFrance = new MySqlCommand(strInsertSQL, myConnection)) { cmdInserttblProductFrance.ExecuteNonQuery(); } } } } } } }
以上が「この接続に関連付けられた開いている DataReader がすでに存在するため、最初に閉じる必要があります」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。