1

我有一個Azure輔助角色在SQL Azure數據庫上執行簡單選擇。很少會引發下面的SqlException。SqlClient SqlException未捕獲

登錄

底層提供對打開失敗。內部異常:超時過期。操作完成之前超時的時間或服務器沒有響應。 異常類型:System.Data.SqlClient.SqlException

異常不作爲SqlException捕獲。它被捕獲到泛型異常處理程序中。任何建議,爲什麼會這樣?

try{ 
} 
catch(System.Data.SqlClient.SqlException sqlExcep) 
{ 
} 
catch(Exception genericExcep) 
{ 
    **//The exception is caught as a generic exception** 
} 

回答

1

SQL數據庫環境是處理網絡負載平衡和資源管理的一層路由器和代理。如果SQL數據庫本身沒有超時,那麼中間的其他東西可能會有(儘管這通常很少見)。

我通常也會處理IOException錯誤,並將其中的一些視爲瞬態錯誤的一種形式。你實際收到了什麼樣的異常類型?

您是否嘗試實施瞬態故障處理應用程序塊? http://msdn.microsoft.com/en-us/library/hh680934(v=pandp.50

埃爾韋

+0

我沒有實現錯誤處理在某些錯誤我只是讓工人角色重試如果它是一個通用的異常我救出並停止工人(發送警報後)這是爲什麼我需要捕捉SQL相關的異常。我想瞬態故障處理塊應該解決這個問題。謝謝! – user275157

1

看起來是這樣的例外,而不是你抓住了實際的異常。什麼是外部異常的類型?你能做的唯一的事情就是抓哪個類型的捕獲的異常是什麼,然後檢查內部異常:

try 
{ 
    // Stuff 
} 
catch (Exception exc) 
{ 
    if (exc.InnerException is System.Data.SqlClient.SqlException) 
    { 
     var sqlException = exc.InnerException as System.Data.SqlClient.SqlException; 

     // Do stuff with the error. 
    } 
} 

這個故事的寓意是你不能明確地捕捉內部異常:(