SqlException约束违规

我正在开发一个asp.net应用程序。 有没有办法在捕获SqlException时知道违反了哪个约束?

SqlException有一个SqlError对象的集合: 错误 。 SqlError具有错误号的属性,您可以将其与已知的约束违规错误号进行比较(例如,2627)。

虽然SqlException本身公开了一个Number属性,但如果在一个批处理中发生多个错误则不准确,因此最好检查Errors集合。

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 } } } 

如果我正确理解您的问题,您必须为ConstraintException添加exception处理程序

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

你是否让exception泡沫破灭? 如果您没有捕获它并在web.config中关闭自定义错误,我相信它会在您的浏览器中显示它。 如果你正在捕捉它我会在catch部分设置一个断点并在那里检查exception。

最好的办法是在你的C#代码中捕获这个catchexception。

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

您可以创建自己的exception并从数据层中抛出exception,否则您可以直接捕获上面提到的exception。

 using System; public class UniqueConstraintException : Exception { }