2
我正在清理我繼承的舊.NET 1.1項目中的DataReader。SqlDataReader:在這種情況下,讀者會關閉嗎?
以前的開發人員以這樣一種方式編碼數據訪問層,即大多數DAL方法返回SqlDataReaders(因此請求調用者正確調用.Close()或.Dispose()方法)。
但是,我遇到了一種情況,調用者沒有捕獲返回的SqlDataReader(因此沒有正確處理它)。請參見下面的代碼:
數據訪問方法:
Public Shared Function UpdateData() As SqlDataReader
...
drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)
Return drSQL
End Function
調用代碼:
...
DataAccessLayer.UpdateData()
...
正如你所看到的,調用方法不接收/趕上返回SqlDataReader對象。那麼會發生什麼?該SqlDataReader仍然在那裏,並打開?還是它會自動收集垃圾,因爲沒有解決它?
我想不出一種調試和測試方法。如果任何人有任何想法或建議,將是偉大的。
我覺得你在這一個正確的。由於我們在SqlDataReader對象關閉/處置時添加了命令行爲來關閉連接,因此垃圾收集應該處理所有事情(無論何時發生)。 – 2008-10-30 15:31:49