1. ホーム
  2. cp

C# データベース操作エラー。この接続に関連付けられた開いているDataReaderがすでにあり、これを閉じる必要があります...

2022-02-17 07:37:26

  MySqlException" タイプの例外が MySql.Data.dll で発生しましたが、ユーザーコードで処理されませんでした。

追加情報です。この接続に関連付けられた開いているDataReaderがすでにあり、先にそれを閉じる必要があります。 このコマンドに関連付けられた開いているDataReaderがすでにあり、最初にそれを閉じる必要があります。

   調べてみると、修正されて解決した記事があり、その記事は以下の通りです。

<スパン <スパン 1. 主な理由は、SqlConnection では DataReader を 1 つだけ開くことができ、別の DataReader を開くときは前のものを先に閉じなければならないからです。
2、おそらくいくつかの友人が求めることができる、私は文のDataReaderを使用していないが、なぜまた、同じエラーを促し、ここでこのDataReaderは、私は十分に深く勉強していないので、指摘するためにあなたを与える、唯一のDataReaderが生成されます呼び出しのメソッドがあることを知って、私はこれも頭痛に遭遇する人の大半だと思う。
  データベースの更新文や挿入文を使用する場合、通常はSqlCommandのExecuteNonQuery()メソッドを使用しますが、その前提はパブリックなデータベース接続が定義されていることです(クエリごとに新しい接続が生成されれば、この問題は存在しませんが、その場合はデータベースが比較的高いリソースを占有することになります)。() の場合、空のDataReaderオブジェクトが内部的に生成され、現在のデータベース接続が閉じられると解放されます。そのため、updateメソッドを使用する場合は、usingキーワードを使用することをお勧めします。usingキーワードは、そのスコープ内のすべてのオブジェクトを解放するステートメントとして機能します。


私のデータベース操作のメインコードは以下の通りです。

                        MySqlConnection con = null;
                         if (con == null)
			{
				con = new MySqlConnection("Server=localhost;User ID=root;Password=root;Database=vs2015test");
			}
			if (con.State == ConnectionState.Closed)
			{
				con.Open();
			}
			using (MySqlCommand cmd = new MySqlCommand(insert, con))
			{
				cmd.Parameters.Add("@Temperature", MySqlDbType.Double,5).Value = Temp;
				cmd.ExecuteNonQuery();
			}

			if (con ! = null || con.State == ConnectionState.Open)
			{
				con.Close();
			}










                         if (con == null)
			{
				con = new MySqlConnection("Server=localhost;User ID=root;Password=root;Database=vs2015test");
			}
			if (con.State == ConnectionState.Closed)
			{
				con.Open();
			}
			using (MySqlCommand cmd = new MySqlCommand(insert, con))
			{
				cmd.Parameters.Add("@Temperature", MySqlDbType.Double,5).Value = Temp;
				cmd.ExecuteNonQuery();
			}

			if (con ! = null || con.State == ConnectionState.Open)
			{
				con.Close();
			}