+-

我想捕获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#-主键与唯一键冲突异常处理 - 乐贴网