2010-03-25 161 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