none
Sql Server的Exception RRS feed

  • 問題

  • 想請教一下

    最近有發生一個狀況

    當伺服器發生狀況連結SQL時

    會需要等待數秒後才會收到Server端回傳的錯誤訊息

    但這樣在尚未回傳的這段時間,就導致程式會被lock住

    請問一下有什麼好方法可以解決這樣的問題嗎

    2012年7月19日 上午 07:47

解答

所有回覆

  • 因為server大多沒有開放ping的功能所以也無法用此方法預先判斷伺服器狀況

    目前小弟 用BackgroundWorker來處理連結這段

    所以想問問有什麼更好的方法可以解決類似問題


    • 已編輯 dodolon 2012年7月19日 上午 08:04
    2012年7月19日 上午 08:04
  • 根據你完全無釐頭的發問, 應該去行天宮問關聖帝君才是.
    2012年7月19日 上午 08:24
  • 請問是連接SQL Database時,所發生的錯誤嗎?

    那可設定connectionstring中的Timeout屬性,把它設小一點。


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年7月19日 上午 09:02
  • 感謝

    timeout的方法我試試看

    是的狀況就像

    連結遠端或是用SQL Server Management去連結一個Sql server

    如果今天伺服器出現異常並不會有立即的錯誤回復,得等一陣子才會回傳錯誤原因

    2012年7月19日 上午 10:01
  • 嗯,

    請試一下Connect Timeout的設定,如下,

    connectionString="Data Source=testServer;Initial Catalog=testDB;User Id=user1;Password=user2;Connect Timeout=10;"

    或是設定 SqlConnection.ConnectionTimeout 屬性


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 dodolon 2012年7月19日 上午 10:59
    2012年7月19日 上午 10:28
  • 我在你提問的 [serial port Close的問題] 貼了 [張貼文章應注意事項及應提供資訊] 連結, 你看了嗎 ? 想必是沒有, 所以我再提醒一次, 麻煩看一下那篇文.

    另外, 請處理一下 [攔截錯誤的問題] , 該標解答的標解答, 還有問題可繼續提問, 否則我很困擾, 不知道該怎麼處理那個討論.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年7月19日 上午 10:30
    版主
  • 我覺得應該用多緒來處理比較好
    2012年7月19日 下午 12:56
  • 如果你使用的是 .Net Framework 4.0 可以利用 Task 類別來啟動另外一個執行序來先判斷資料庫是否可以正常連接,而不影響後續程式碼的執行。

    static void Main(string[] args)
    {
    	Task.Factory.StartNew(() =>
    		{
    			SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
    			builder.DataSource = ".";
    			builder.InitialCatalog = "Northwind";
    			builder.IntegratedSecurity = true;
    			builder.ConnectTimeout = 60;
    
    			using (SqlConnection con = new SqlConnection(builder.ToString()))
    			{
    				try
    				{
    					con.Open();  
    				}
    				catch (Exception ex)
    				{
    					Console.WriteLine(con.State);
    					Console.Write(ex.Message);
    				}
    			}                    
    		});
    
    	Console.WriteLine("下一行指令");
    	Console.ReadKey();
    }

    詳細作法在黑暗大的文章中有詳盡的介紹。

    http://blog.darkthread.net/post-2012-07-20-net4-task.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月20日 上午 01:43