C# 主密钥与唯一密钥冲突异常处理

C# 主密钥与唯一密钥冲突异常处理,c#,sql,exception,C#,Sql,Exception,我想捕获SQL异常,区分主键冲突和唯一键冲突。这两种类型的异常返回相同的错误代码2627 try { } catch (SqlException ex) { if (ex.Number == 2627) { throw new UniqueOrDuplicateKeyException("Unique key or Primary key duplication") } } 这很好,但我想抛出UniqueKeyException或PrimaryKeyE

我想捕获SQL异常,区分主键冲突和唯一键冲突。这两种类型的异常返回相同的错误代码2627

try
{

}
catch (SqlException ex)
{
    if (ex.Number == 2627)
    {
        throw new UniqueOrDuplicateKeyException("Unique key or Primary key duplication")
    }
}
这很好,但我想抛出UniqueKeyException或PrimaryKeyException。我知道可以识别要抛出的异常,但解析错误消息时以“违反唯一密钥约束”或“违反PRIMART密钥约束”开头。当然,我想避免这个选择

另一种可能是直接在我的存储过程中执行,但我有很多存储过程,如果在任何地方都添加它可能会很烦人


您知道如何优雅地处理此问题的一些可能性吗?

除了错误消息字符串之外,我看不到其他区别方法,即:

PK违规:

唯一约束冲突

如果您在控件中这样做,您可以考虑一个唯一的索引吗?


如果是这样的话,您可以检测到2601之间的唯一索引冲突,以及2627之间的PK冲突。

不知道为什么我不能将此作为答案发布,但请我将其作为评论发布。这一点以前已经得到了回答。你可以得到你的答案

简而言之,你可以使用下面的技巧:

if (ex.Message.Contains("Unique")) // It is an unique key violation.

顺便说一句,我可以想象我在解释UKC突然变成UI的原因时所遇到的几乎每一位DBA脸上的表情……我不认为thad异常处理是改变所有表中索引约束的充分理由。谢谢,但在我写的时候,我想避免这种解决方案。
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'U_Foo'. Cannot insert duplicate key in object 'dbo.Foo'.
if (ex.Message.Contains("Unique")) // It is an unique key violation.