Dot-Net
SqlDataAdapter.Dispose 是否真的關閉了關聯的 SqlConnection?
有誰知道 SqlDataAdapter.Dispose 方法是否實際關閉或處置任何 SqlConnections?我載入了 Reflector,我看到 SqlDataAdapter 繼承自 DbDataAdapter。如果我反彙編並查看該類中的 dispose 方法,似乎沒有任何 SqlConnections 的處置。我想我可以為此編寫一個測試,但我想我會問是否有人對此有任何見解。
首先要注意的是 DataAdapter 在某些情況下會管理和關閉您的連接。例如,如果您正在使用 DataAdapter,您可能正在使用
.Fill()和.Update()函式對 DataTable/DataSet 進行操作。與 SELECT 語句關聯的連接對象必須有效,但不需要打開。如果在呼叫 Fill 之前關閉連接,則打開它以檢索數據,然後關閉。如果在呼叫 Fill 之前連接已打開,則它保持打開狀態。
.Update()文件根本沒有提及有關連接的任何內容,因此我希望需要手動管理它。您專門詢問了該
Dispose()方法。就像Update(),Dispose()文件沒有特別提到連接,所以我希望需要手動關閉它。最後,我們可以稍微改進一下 Bob King 的程式碼,如下所示:
Using conn as New SqlConnection(""), _ adapter as New SqlDataAdapter() With {.Connection = conn} ' Do stuff End Using或者在 C# 中:
using (SqlConnection conn = new SqlConnection("")) using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn}) { // Do stuff }