+-
C#-主键与唯一键冲突异常处理
我想捕获SQL异常,并且在主键违例和唯一键违例之间有所区别.这两种类型的例外返回相同的错误代码2627.

try
{

}
catch (SqlException ex)
{
    if (ex.Number == 2627)
    {
        throw new UniqueOrDuplicateKeyException("Unique key or Primary key duplication")
    }
}

很好,但是我想抛出UniqueKeyException或PrimaryKeyException.我知道可以识别抛出哪个异常的可能性,但是它正在分析以“违反UNIQUE KEY约束”或“违反PRIMART KEY约束”开头的错误消息.当然,我想避免使用此选项.

另一种可能性是直接在我的存储过程中执行此操作,但是我有很多存储过程,将其添加到任何地方都非常烦人.

您知道如何以优雅的方式处理此问题吗?

最佳答案
除了错误消息字符串,我看不到其他区分方式:

PK违规:

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__Foo'. Cannot insert duplicate key in object 'dbo.Foo'.

独特的约束违规

Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'U_Foo'. Cannot insert duplicate key in object 'dbo.Foo'.

如果在您的控制范围内,您可以考虑将changing the Unique Constraint用作唯一索引?

如果是这样,则可以在2601之间检测到唯一索引冲突,在2627之间检测到PK冲突.

点击查看更多相关文章

转载注明原文:C#-主键与唯一键冲突异常处理 - 乐贴网