ホームページ >データベース >mysql チュートリアル >「DataReader を最初に閉じる必要があります」が発生するのはなぜですか? どうすれば解決できますか?
データ管理例外: 「DataReader Must Be Closed First」エラーの理解と解決
提供されたコードで、新しいコードを実行しようとしました。同じ接続に対して DataReader が開いている間に ExecuteNonQuery() を使用する SQL ステートメント。これにより、「この接続に関連付けられた開いている DataReader がすでに存在します。最初に閉じる必要があります。」という例外が発生します。
MSDN によると、この例外は、DataReader が開いているときに使用する接続が排他的にロックされるために発生します。使用期間中。これは、元の DataReader が閉じられるまで、その接続に対して新しい DataReader の作成を含む他のコマンドを実行できないことを意味します。
このエラーを解決するには、他のコマンドを実行する前に DataReader が閉じていることを確認する必要があります。同じ接続上のコマンド。提供されたコードでは、例外をスローする行の直前に myReader.Close() への呼び出しを追加することでこれを実現できます。
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 } } }
ExecuteNonQuery() コマンドを実行する前に DataReader を閉じることで、接続の排他ロックを解放し、新しいコマンドが正常に実行できるようにします。
以上が「DataReader を最初に閉じる必要があります」が発生するのはなぜですか? どうすれば解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。