2014-07-03 45 views

回答

5

關閉Dispose不在析構函數中(Finalize)。因此,請使用using -statement,並且您處於安全的一方。

這是很難找到文檔(不依賴於反編譯的程序集),但最後我發現它在SqlConnection.Close

如果的SqlConnection超出範圍,它不會被關閉。因此, 您必須通過調用Close或Dispose來明確地關閉連接。 Close和Dispose在功能上等同。

....

下面的示例創建一個SqlConnection,打開它,顯示一些 其性質。連接在使用塊的末尾 處自動關閉。

此外:

注意

不要調用關閉或Dispose上一個連接, DataReader的,或在您的 類的Finalize方法的任何其他託管對象。在終結器中,您應該只發布您的類直接擁有的非託管資源 。如果您的班級沒有擁有任何 非託管資源,請不要在您的班級 定義中包含Finalize方法。

源(ILSpy,.NET 4):

// System.Data.SqlClient.SqlConnection 
protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     this._userConnectionOptions = null; 
     this._poolGroup = null; 
     this.Close(); // <------- 
    } 
    this.DisposeMe(disposing); 
    base.Dispose(disposing); 
}