問題は、何らかの理由で DataReader が閉じられていないことです。例外?メソッド ユーザーが DataReader を閉じるのを忘れていませんか?
本体の外部で使用される DataReader を返す関数は、それを外部コードに閉じる責任があるため、Reader が閉じられるという保証はありません。リーダーを閉じないと、開いた接続を再利用できません。
そのため、関数から DataReader を返すことは非常に悪い考えです!
このテーマに関する全体的な議論を見ることができます/10507254#10507254">こちら .
この関数の使用法を探します (GetDataReader
)、リーダーが閉じられているという保証があるかどうかを確認します。そして、最も重要なことは、最初の DataReader が閉じられる前に、このコードが再入力され、同じコレクションを使用して新しい DataReader を開く可能性がないことです。 (CommandBehavior.CloseConnection に惑わされないでください。これは、DataReader が閉じられたときにのみ接続を閉じます... 閉じるのに失敗しない場合にのみ)