我正在开发一个asp.net应用程序。 有没有办法,当捕获SqlException时, 知道违反了哪个约束?
答案 0 :(得分:8)
SqlException有一个SqlError对象集合:Errors。 SqlError具有错误Number的属性,您可以将其与已知的约束违规错误号进行比较(例如,2627)。
虽然SqlException本身暴露了Number属性,但如果在一个批处理中发生多个错误则不准确,因此最好检查Errors集合。
答案 1 :(得分: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
}
}
}
答案 2 :(得分:2)
如果我正确理解你的问题,你必须为ConstraintException添加异常处理程序
try
{
}
catch(ConstraintException exc)
{
//exc.Message
}
答案 3 :(得分:0)
你是否让异常泡沫破灭?如果您没有捕获它并在web.config中关闭自定义错误,我相信它会在您的浏览器中显示它。如果你正在捕捉它我会在catch部分放置一个断点并在那里检查异常。
答案 4 :(得分:-1)
最好的办法就是在你的C#代码中捕获这个catch异常。
catch(SqlException ex)
{
if (ex.Message.Contains("UniqueConstraint"))
throw new UniqueConstraintException();
throw;
}
您可以创建自己的异常并从数据层中抛出异常,否则您可以直接捕获上述异常。
using System;
public class UniqueConstraintException : Exception
{
}