SqlException约束违规

时间:2010-03-25 15:52:27

标签: c# asp.net sql-server exception-handling

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

5 个答案:

答案 0 :(得分:8)

SqlException有一个SqlError对象集合:ErrorsSqlError具有错误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
{
}