1

次のエラーが表示されます。

「このコマンドに関連付けられた開いている DataReader が既に存在します。これを最初に閉じる必要があります。」

foreach ループでリーダーを使用したためですか? または何が問題なのですか?よろしくBK

foreach( Apple a in listApple )
{


....
                   using (SmartSqlReader reader = Db.CurrentDb.ExecuteReader(sp))
                    {
                        while (reader.Read())
                        {
                            a.blablabla += reader.GetInt32("BLA_BLA_BLA"); 
                        }
                    }


.....

}
4

3 に答える 3

3

SmartSqlReader が破棄されたときに閉じるように実装しましたか? 通常のデータ リーダーは IDisposable インターフェイスを実装し、Dispose メソッドから Close を呼び出します。

適切に閉じないと、ガベージ コレクターがリーダーを見つけてクリーンアップするまで Command オブジェクトが占有されたままになります。

于 2009-10-22T07:39:10.437 に答える
1

を追加reader.Close()して閉じるSmartSqlReader

于 2009-10-22T07:14:06.480 に答える
1

次のことを試してください。

using (SmartSqlReader reader = Db.CurrentDb.ExecuteReader(sp))
 {
  while (reader.Read())
  {
   a.blablabla += reader.GetInt32("BLA_BLA_BLA"); 
  }
  reader.Close();
 }
于 2009-10-22T07:49:48.063 に答える