SqlDataReader:このシナリオでは、リーダーは閉じられますか?
-
05-07-2019 - |
質問
継承した古い.NET 1.1プロジェクトのDataReadersをクリーンアップしています。
前の開発者は、ほとんどのDALメソッドがSqlDataReadersを返すようにデータアクセス層をコーディングしました(したがって、.Close()または.Dispose()メソッドを適切に呼び出すために呼び出し元に任せています)。
ただし、呼び出し元が返されたSqlDataReaderをキャッチしていない(したがって、適切に破棄していない)状況に遭遇しました。以下のコードを参照してください。
データアクセス方法:
Public Shared Function UpdateData() As SqlDataReader
...
drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)
Return drSQL
End Function
呼び出しコード:
...
DataAccessLayer.UpdateData()
...
ご覧のとおり、呼び出し元のメソッドは、返されたSqlDataReaderを受信/キャッチしません。それでどうなりますか?そのSqlDataReaderはまだそこにあり、開いていますか?または、アドレス指定されていないため、自動的にガベージコレクションが行われますか?
これをデバッグしてテストする方法は考えられませんでした。誰かが素晴らしいアイデアや提案を持っているなら。
解決
私はそれが閉じられると信じていますが、ガベージコレクターがそれに近づくまではそうではありません。
所属していません StackOverflow