ホームページ >データベース >mysql チュートリアル >「この接続に関連付けられた開いている DataReader がすでに存在するため、最初に閉じる必要があります」というメッセージが表示されるのはなぜですか?

「この接続に関連付けられた開いている DataReader がすでに存在するため、最初に閉じる必要があります」というメッセージが表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-05 08:38:10758ブラウズ

Why Am I Getting

トラブルシューティング「この接続に関連付けられた開いている 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。