2013-06-18 169 views

回答

17

Dispose如果還未關閉,也會關閉連接,但在撥打Close時,您可以重新打開連接。這是不可能的,當連接處置。

在一般情況下,不叫Close,而只是調用dispose隱含通過包裝在using塊連接的創建:

using (var connection = new SqlConnection(...)) 
{ 
    // use connection here. 
} // connection gets closed and disposed here. 
+0

看看[源代碼](http://system.data.sqlite.org/index.html/artifact/31b823606b81d72d120bdd8dca8de8421b9abb16)...可以顯示'Dispose()'在內部調用'Close()'。 – Arran

+0

謝謝你的答案(對不起,重複) – Epoc

+0

@Steven我是否說過這是? – Arran

5

的Connection.close()將簡單地關閉與服務器的連接如連接字符串中所定義。在此之後,連接可以使用/重新打開。

Connection.Dispose()將完全清理,刪除所有非託管資源,防止再次使用該連接。一旦處置被調用,您不應該再嘗試使用該對象。在Dispose(),內關閉()`也都會被調用。

我會建議使用using語法,像這樣如果可能的話,以確保一切正確清理:

using(SqlLiteConnection conn = new SqlLiteConnection(...)) 
{ 
    // Do work here 
} 

這會自動配置爲你的連接,而不考慮的異常被拋出。

+2

一個細微的區別是'Close'不會在該連接上調用'GC.SuppressFinalize'方法,而'Dispose'調用該方法。因此不配置連接會使連接對象保持更長時間。這對連接池沒有影響,但是對內存有影響。然而,在「SqlConnection」情況下的差異將會被忽略。 – Steven

+0

謝謝,現在對我來說更加清楚(抱歉,重複) – Epoc

相關問題