一尘不染

在.NET中捕获SQL唯一关键异常

sql

我想知道是否有人除了解析错误消息之外,还有更优雅的方法来检查.NET中SQL的唯一键异常?现在,我在SQL中调用了该存储过程,然后在.NET中使用了一个try
catch块。在try
catch块中,我解析了错误消息,这是一个唯一键错误,我向调用类抛出了一个自定义错误的实例,如果没有,我只是向调用类抛出了原始异常。对我来说,这似乎效率很低。


阅读 187

收藏
2021-03-17

共1个答案

一尘不染

如果捕获到SqlException,则应该能够枚举包含多个“ SqlError”对象的“ Errors”集合。

SqlError具有“ Class”和“ Number”之类的其他属性-唯一的键冲突是class = 14和number
=2601。检查这些数字以准确找到您的错误。

这些错误代码与您尝试在SQL Management Studio中执行查询时得到的错误代码相同:

消息2601,级别14,状态1,行1
无法在对象.....中插入重复的键行。
语句已终止。

“ Msg”转换为SqlError的“ Number”属性,“ Level”转换为“ Class”。

try
{
  _cmd.ExecuteNonQuery();
}
catch(SqlException sqlExc)
{
   foreach (SqlError error in sqlExc.Errors)
   {
      string msg = string.Format("{0}: {1}", error.Number, error.Message);
   }
}

这样,您可以轻松准确地识别“违反唯一约束”错误。

马克

2021-03-17