2009-07-10 108 views
1

我有一個winform程序,它使用合併複製來保持本地SQL Express與我們網絡中的中央SQL Server同步。由於此應用的性質,同步過程會在應用打開和關閉時自動運行。我做這件事的方式(如下)似乎非常耗時。什麼是更快的方式?判斷SQL Server是否可用的最快方法

條條框框思考,如果我只是檢查了服務器本身雖然可能提出一個孔,其中服務器可用,但SQL是下降邊緣的情況下,很可能會好起來的。或者,也許只是檢查我們的域是否可用,儘管這可能會讓我猜測出同樣的漏洞。

謝謝!

private static bool IsSqlAvailable() 
    { 
     try 
     { 
      var conn = new SqlConnection("Data Source=WWCSTAGE;Initial Catalog=Connect;Integrated Security=True"); 
      conn.Open(); 
      conn.Close(); 
      HUD.IsSQLAvailable = true; 
      return true; 
     } 
     catch (Exception) 
     { 
      HUD.IsSQLAvailable = false; 
      return false; 
     } 
    } 

作爲附加的註釋。以上在關閉網絡時特別慢。我甚至將連接超時設置爲1,並且在相當長的一段時間內仍然處於這種狀態。

+1

如果您將連接超時設置爲1秒,並且它仍然需要一段時間才能失敗,也許不應該責怪連接嘗試。可以用DNS查找嗎?有關連接超時的一些有趣信息,請參閱http://www.eggheadcafe.com/conversation.aspx?messageid=31241642&threadid=31241641。 – Jacob 2009-07-11 08:07:30

回答

2

我在這種場景中,在那裏你檢查的東西存在/連接性是你無法控制的,通常的建議:不要。

你的檢查可以通過和即時之後,結果不再是真實的。所以只要嘗試做你想做的事情,假設SQL服務器可用,並且優雅地處理不可避免的錯誤。

+0

除了這不能解決我的速度問題。如果我讓它嘗試運行同步過程並等待它正常出錯,則用戶的負載體驗非常慢。如果我在任何其他地方運行同步,那麼載入和關閉我可能會同意你,但因爲我不是,所以我不這樣做。 感謝您的答覆。 – 2009-07-10 13:53:38

3

我想包我的一個使用子句中連接並可能降低連接超時在我的連接字符串(通常,如果服務器啓動,它應該連接比默認的更迅速),但除此之外,它的罰款。

0

你可能在想這個太難。您的SQL服務器的可用性基本上等同於您可以連接到它,所以我會說您嘗試打開連接的方法非常有效。我唯一的建議是在你調用方法的地方分配HUD.IsSQLAvailable一次,因爲你已經獲得了返回值,而不是在IsSqlAvailable()內分配兩次。

0

我只是在一個應用程序,我在工作中寫今天寫了一個測試連接方法。

我只是用在短短connection.open的Connection.close和一個簡單的嘗試捕捉方法和捕捉異常,如果它失敗。如果你不需要它,你不必設置一個變量。只是返回true或false。如果連接失敗,它會掛起幾秒鐘。

2

我想你可以問問SQL Server TCP端口。 但是,如果使用命名實例則會出現問題。

相關問題