2012-04-28 23 views
1

を閉じる必要があります。この接続に関連付けられているオープンのDataReaderは、私は私のアプリケーション内で2倍のデータリーダーを使用し、それがこのMySqlException(0x80004005が):最初の

MySqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     //Code 
    } 
    reader.Close(); 

のように見える両方の時間は、誰もが私にいくつかを与えることができますすでにありますどのようにこのエラーを解決するためのポインタ?またはどこを見るか?申し訳ありませんがあまりにも曖昧ですが、それはエラーが私に言っているものです。それは、この点を指す:

 MySqlCommand cmdDel = new MySqlCommand("UPDATE " + _Database + " SET balance=" + balance + ", bitaddress=" + myads + ", lostbalance=" + lostbalance + " WHERE username = '" + username + "'", connection); 
     cmdDel.ExecuteNonQuery(); 
     cmdDel.Dispose(); 

私の推測では、誰もがこの上で確認することができ、クエリコマンドを実行すると、しばらく(reader.Read())の内部で許可されていないことができることがありますか?

答えて

3

これは、ほぼ確実に、複数のコマンドオブジェクト間で接続オブジェクトを共有していることを意味します。これを行うのは避けてください(すべてが単一のデータベーストランザクションに関与している場合を除きます)。あなたは、一般的に従うべき

モデルは次のとおりです。

using(var connection = new MySqlConnection("...")) 
{ 
    using(var cmd = new MySqlCommand("...",connection)) 
    { 
     //Set up parameters/other settings/as required 
     connection.Open(); 
     cmd.<Whatever ExecuteXXX method you need to use>(); 
     //If it was ExecuteReader, process the results now 
    } 
} 
//If it was ExecuteScalar, or a fill of a DataSet or DataTable, consume the results now 

あなたはそれを防ぐため、特定のニーズを持っている場合を除き、手動でDispose()を呼び出すのではなく、using文で使い捨てをラップすることを好む必要があります。

1

whileループ内でクエリを記述できますが、外部ループで使用されているリソースを使用しないでください。

1

いくつかのリーダーを同時に開く場合は、各リーダーごとにいくつかの新しい接続を開く必要があります。作成されたconectionは、読者が閉じた後に再び使用することができます。

関連する問題