2010-03-25 197 views
4

我正在處理一個asp.net應用程序。 有沒有辦法,當捕獲一個SqlException, 知道哪些約束被違反?違反SqlException約束

+0

是的。我只想知道用戶是否違反了唯一的約束,所以應用程序可以通知'UniqueConstraintException:Exception'(繞過SqlException)哪個插入的數據錯誤 – DJPB 2010-03-25 16:07:14

回答

2

你必須添加異常處理程序ConstraintException如果我明白你的問題正確

try 
{ 

} 
catch(ConstraintException exc) 
{ 
//exc.Message 
} 
0

你讓異常泡沫嗎?如果你不抓住它,並在web.config中關閉自定義錯誤,我相信它會顯示在你的瀏覽器中。如果你在捕捉它,我會在捕捉部分放一個斷點並檢查那裏的異常。

7

SqlException有一個SqlError對象的集合:ErrorsSqlError具有錯誤Number的屬性,您可以將其與已知的約束違規錯誤編號(例如2627)進行比較。

雖然SqlException本身公開了一個Number屬性,但如果在單個批處理中發生多個錯誤並且因此更好地檢查Errors集合,那麼這是不準確的。

-1

最好的事情是在你的C#代碼中捕獲這個catch異常。

catch(SqlException ex) 
{ 
    if (ex.Message.Contains("UniqueConstraint")) 
     throw new UniqueConstraintException(); 

    throw; 
} 

您可以創建自己的異常並從數據層中拋出異常,否則可以直接捕獲上述的異常。

using System; 

public class UniqueConstraintException : Exception 
{ 
} 
+0

-1。也因爲.NET框架中已經有'ConstraintException'。 – Neolisk 2014-11-03 13:15:39

4
catch (SqlException ex) 
{ 
    if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error 
    { 
     switch (ex.Errors[0].Number) 
     { 
      case 547: // Foreign Key violation 
       throw new InvalidOperationException("Your FK user-friendly description", ex); 
        break; 
      // other cases 
     } 
    } 
} 
+0

在這種特殊情況下,爲了簡單起見,您可以使用ex.Number。 – 2015-05-19 11:18:59