2016-07-18 29 views
0

我有一個長時間運行的.NET進程(一個Windows服務),它與SQL Server進行通信。每次我想要使用它時,是否應該創建一個全新的SqlConnection,或者每次嘗試重新打開一個現有連接?

本來,我在服務啓動時打開了一個連接,並且保持打開。但是,偶爾會出現網絡呃逆或SQL Server重新啓動會中斷連接,我的進程不知道這一點。它會試圖繼續針對關閉的連接拋出SQL。

試圖保持這樣的開放連接顯然是我試圖太聰明。所以,做我:

  1. 創建(開放的)的新SqlConnection對象每次
  2. 創建一次在服務啓動時連接,每次只是試圖重新打開連接

對於後者(#2),我有這樣的代碼:

if(connection.State != ConnectionState.Open) 
{ 
    connection.Open(); 
} 

我只有這樣做,因爲連接已經存在。如果我每次創建新連接(#1),顯然它會關閉,我需要打開它。

我希望做的是利用SQL連接池實際上而不是每次打開一個新的連接,但只是讓連接池管理 - 當我有一個連接池時給我一個開放的連接,或者在沒有時打開一個新的。 (#1),或者如果我只是重用連接並嘗試每次重新打開它(#2),要實現這一點,是否重要?

+0

可能的重複[最好是傳遞一個開放的SqlConnection作爲參數,或在每個方法中調用一個新的?](http://stackoverflow.com/questions/9807268/is-it-best-to-通的開-的SqlConnection作爲一種參數或 - 呼叫-A-新酮在-EA) –

回答

1

連接池意味着即使你做了(1),在底層,框架將爲你做(2)以提高性能。所以你可以隨時創建一個新的連接。

值得指出的是,在大多數情況下,池只適用於相同的連接字符串。所以如果你改變了某些選項,這些連接可能不會合並。

相關問題