2008-10-29 81 views
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仍然在那裏,並打開?還是它會自動收集垃圾,因爲沒有解決它?

我想不出一種調試和測試方法。如果任何人有任何想法或建議,將是偉大的。

回答

4

我相信它會被關閉,但直到垃圾收集得到「四捨五入到它,這可能不是一個很長的時間......

+0

我覺得你在這一個正確的。由於我們在SqlDataReader對象關閉/處置時添加了命令行爲來關閉連接,因此垃圾收集應該處理所有事情(無論何時發生)。 – 2008-10-30 15:31:49