継承した古い .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 はまだそこにあり、開いていますか? それとも、何も対処されていないため、自動的にガベージコレクションが行われますか?
これをデバッグしてテストする方法が思いつきませんでした。誰かに素晴らしいアイデアや提案があれば。