投稿者 よねKEN  (社会人) 投稿日時 2010/6/24 20:32:11
> ところが今開発中のプログラムで、SqlDataReaderをCloseしていないのに同じ接続で
> 新しくSqlDataReaderを取得できてしまっています。

GetData1メソッドの変数drはローカル変数ですから、
メソッドを抜けた時点で参照がなくなります。
このdrは保持していたSqlDataReaderインスタンスはいずれガベージコレクターに回収されます。

ガベージコレクターが動作し、このインスタンスが回収された場合、
回収作業の中で、Disposeメソッドが呼び出され、SqlDataReaderインスタンスはクローズされます。

ですので、明示的にCloseメソッドを呼び出していないような「好ましくない」実装がされていても、
必ずしも例外が発生するとは限りません。このような理由が一つの可能性としては考えられます。

GetData1メソッド、GetData2メソッドを連続で呼び出したような場合だと
GetData2メソッドの呼び出し時点でGetData1メソッドのローカル変数drで参照していた
インスタンスはまだ回収されていない可能性が高いので例外は発生すると思います。
このように連続してGetData1メソッド、GetData2メソッドを呼び出したような場合でも
例外が発生しないのであれば、ガベージコレクターが動作してクローズされた、
という原因ではないかもしれません。