2010-05-04 67 views
5

目前我使用此代碼來檢查數據庫訪問:ADO.NET:檢查數據庫服務器是否可訪問的更快方法?

public bool IsDatabaseOnline(string con) 
{ 
    bool isConnected = false; 
    SQLConnection connect = null; 

    try { 
     connect = new SQLConnection(con); 
     connect.Open(); 
     isConnected = true; 

    } catch (Exception e) { 
     isConnected = false; 

    } finally { 
     if (connect != null) 
      connect.Close(); 
    } 

    return isConnected; 
} 

雖然這個代碼工作正常,存在的缺點。如果服務器不在線,則在決定不可用之前花費大約4秒的時間嘗試打開連接。

有沒有辦法測試連接而不嘗試實際打開它並等待超時?就像一個數據庫相當於ping?

+0

你希望你的服務器停機時間長? – 2010-05-04 00:16:01

+0

您應該將其更改爲'catch(SqlException)' – SLaks 2010-05-04 00:16:03

回答

-1

是的,沒有。

您可以隨時注意您的服務器偵聽的端口,然後嘗試使用套接字直接連接到該端口。如果你成功了,你可以「假設」它是在線的,但它可能不取決於你的網絡環境。儘管如此,這是最「平」的方法。當然,這可能還有其他的東西在那裏傾聽,但這在數據庫剛剛暫時關閉的標準環境中可能不太可能。另外,如果你的數據庫是在專用機器上,你可以用實際上 ping它。但是這隻會檢查機器是否啓動,而不是數據庫服務器。

最後的選擇是,讓一些後臺服務器不斷監視數據庫服務器,當它檢測到它處於脫機狀態時,它會標記適當的東西。然後你的應用程序會檢查的東西(實際上是一個緩存),它實際上是立竿見影的。當然,這意味着它可能會給出假陰性(即服務器可能在線,但監控服務尚未更新緩存)。

2

我的方法(連接成功後)做出選擇不依賴於表,例如時間。 在MS SQL Server:

「選擇SYSDATETIME()」

相關問題