2013-02-25 63 views
0

我正在編程一個C#TCP服務。在此服務中,客戶端連接到我們的TCP服務器 以獲取或寫入一些數據。C#持久連接到SQL Server

問題:

早上我們重啓我們的數據庫服務器和服務失去與 數據庫的連接。當下一個請求進入我們的系統時,不再有數據庫連接。

有人知道我能做什麼嗎?

如何在重新啓動後保持或重新連接到數據庫服務器?

+3

每次您需要在數據庫上執行某些操作時,請創建並打開一個新連接。爲什麼你要保持一個持久連接?它解決了什麼要求? – slugster 2013-02-25 13:41:52

+0

我認爲它需要更多時間來重新連接。但是現在我發現,由於連接池的原因,它不會產生很大的性能差異。 – MjeOsX 2013-02-25 14:42:47

回答

2

在你的情況下,我認爲最好不要在所有的服務生命期內維護一個到sql數據庫的開放SqlConnection。

取而代之的是,實例化一個SqlConnection對象,打開它,處理您的查詢,然後關閉它:它將使用SQL Server的內部機制connection pooling

例如,可以在其打開和關閉的連接的代碼塊包圍每個查詢:

using(var cn = new SqlConnection(csString)) 
{ 
    cn.Open(); 

    ... // your query 

    cn.Close(); 
} 

通過這種方式,當重新啓動數據庫夜間,這將是透明的爲您服務。

+0

謝謝。 我會試試這個解決方案 – MjeOsX 2013-02-25 15:03:55

+0

這裏不是Close()調用是多餘的,因爲它會在using塊關閉時被調用? – Finster 2013-04-11 15:03:19

+1

是的,但我更喜歡保持它的愚蠢的原因:如果我刪除它,單獨的cn.Open()方法使我的代碼太難看。 – Larry 2013-04-11 19:05:53