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