2013-01-14 34 views
5

我讀this有關處置SQL連接的問題。關閉(),但不處置()SQL連接 - 影響

我的問題是,它是如何簡單地關閉一個SQL連接,但不處理它? 我們有一個簡單的關閉功能,但從來沒有處理過,它每天使用1000次。 簡單地關閉它會更好嗎,還是關閉並處理它會更好?

我知道dispose()也關閉連接,但我想知道爲什麼關閉不處理連接。

+1

它簡單地用'using'語句包裝每個連接有多困難?我已經習慣了這種習慣並隨處使用它。 – mellamokb

+0

'.Close'可能不會處理連接,因爲您可以再次輕鬆調用'.Open'來重新打開連接。 – mellamokb

+0

@mellamokb。鑑於聯網,您可以輕鬆地重新建立連接。池不會處理它,直到它在2分鐘內處於非活動狀態(默認) –

回答

4

關於連接的重要事情是關閉它們,以便它們返回到連接池。

因此,處理和關閉連接之間幾乎沒有什麼區別,只要您遵守關閉和不重複使用連接的規定。

但是,習慣於在using聲明中包裝創建連接意味着您永遠不會忘記關閉它。

這是一個很好的習慣用法 - 任何實現IDisposable的對象的創建都應該包含在using聲明中,作爲這樣一個習慣用法,它也是一個很好的方法。

0

取決於是否超出範圍。 如果有,它將被關閉,並返回連接池(因爲您沒有禁用該連接池)。 因此,在您執行操作時隱式或顯式調用close會明確您的意圖,並使該連接「立即」可供池中的重用。

想法是說服開發人員快速進出數據庫。很多小交易。不是舊的風格打開一個連接,然後隱藏它,以便其他人不能得到它,以防萬一它再次需要。

如果連接池位於某個使用子句上,則相當於創建,打開,關閉。 如果它關閉,則使用子句等同於創建,打開,關閉,處置。

在任何一種情況下,真正的交易都是確保它超出範圍。除非常罕見的情況外,連接應該是本地參考,並且具有這種特殊用途的一生。您通常不會在運行時實例化一個實例,並將其作爲實例的mainform屬性。