SQL Server中的唯一键冲突 – 是否可以安全地使用Error 2627?

我需要通过我正在开发的C#应用​​程序以特殊方式捕获违反UNIQUE约束的情况。 可以肯定的是, Error 2627将总是对应于这种违反,以便我可以使用

 if (ThisSqlException.Number == 2627) { // Handle unique constraint violation. } else { // Handle the remaing errors. } 

2627是唯一约束(包含主键),2601是唯一索引

 SELECT * FROM sys.messages WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033 

这是我写的一个方便的扩展方法来find这些:

  public static bool IsUniqueKeyViolation(this SqlException ex) { return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 )); } 

在一个近似值内,是的。

如果您searchMS错误和事件站点的SQL Server,错误2627,您应该希望到达此页面 ,这表明该邮件将始终涉及重复键违规(请注意哪些部分参数化,哪些不是):

 Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.