2009-11-03 19 views

回答

0

抓SQLEXCEPTION

catch(SqlException ex) 
{ 
    foreach(SqlError error in ex.Errors) 
    { 

    } 
} 
1

你可以檢查郵件文本,數字,而在其切換的情況下知道錯誤...

try { 
} 
catch (SqlException ex) 
{ 
string str; 
     str = "Source:"+ ex.Source;   
     str += "\n"+ "Number:"+ ex.Number.ToString(); 
     str += "\n"+ "Message:"+ ex.Message; 
     str += "\n"+ "Class:"+ ex.Class.ToString(); 
     str += "\n"+ "Procedure:"+ ex.Procedure.ToString(); 
     str += "\n"+ "Line Number:"+ex.LineNumber.ToString(); 
     str += "\n"+ "Server:"+ ex.Server.ToString(); 

     Console.WriteLine (str, "Database Exception"); 
} 
7

看一看的documentation of the SqlException類,特別是,例如,在其propertiesSqlException.Number中,應該允許您確定發生了哪種類型的SqlException(唯一約束,外鍵......)。

您可以使用過濾的異常來捕獲特定的錯誤。 VB.NET:

Try 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
End Try 

C#(6.0版以上):

try 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
1

這取決於異常和數據庫後端上。您的數據庫將爲約束,權限等特定事項生成唯一的錯誤代碼,但該錯誤代碼因數據庫而異。 Oracle有一個MASSIVE pdf(2000多頁)列出了它可能拋出的每一個可能的錯誤,我相信Sqlserver有類似的東西。我的觀點是你尋找特定的錯誤代碼,然後你需要trp只是在catch部分中的那些,並以不同的方式處理它們,然後你可以得到大量的其他錯誤。

相關問題