Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
SqlDataReaderをCloseしなくても例外が発生しない
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9679#CommentId15068
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
よねKEN
 (社会人)
投稿日時
2010/6/24 20:32:11
> ところが今開発中のプログラムで、SqlDataReaderをCloseしていないのに同じ接続で
> 新しくSqlDataReaderを取得できてしまっています。
GetData1メソッドの変数drはローカル変数ですから、
メソッドを抜けた時点で参照がなくなります。
このdrは保持していたSqlDataReaderインスタンスはいずれガベージコレクターに回収されます。
ガベージコレクターが動作し、このインスタンスが回収された場合、
回収作業の中で、Disposeメソッドが呼び出され、SqlDataReaderインスタンスはクローズされます。
ですので、明示的にCloseメソッドを呼び出していないような「好ましくない」実装がされていても、
必ずしも例外が発生するとは限りません。このような理由が一つの可能性としては考えられます。
GetData1メソッド、GetData2メソッドを連続で呼び出したような場合だと
GetData2メソッドの呼び出し時点でGetData1メソッドのローカル変数drで参照していた
インスタンスはまだ回収されていない可能性が高いので例外は発生すると思います。
このように連続してGetData1メソッド、GetData2メソッドを呼び出したような場合でも
例外が発生しないのであれば、ガベージコレクターが動作してクローズされた、
という原因ではないかもしれません。