我需要UNIQUE
通过正在开发的C#应用程序以特殊方式捕获违反约束的情况。可以肯定地说,这Error 2627
将始终与此类违规相对应,以便我可以使用
if (ThisSqlException.Number == 2627)
{
// Handle unique constraint violation.
}
else
{
// Handle the remaing errors.
}
?
Answers:
2627是唯一约束(包括主键),2601是唯一索引
SELECT * FROM sys.messages
WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033
这是我编写的便捷扩展方法,用于发现这些缺陷:
public static bool IsUniqueKeyViolation(this SqlException ex)
{
return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 ));
}
在近似范围内,可以。
如果您在MS错误和事件站点中搜索SQL Server错误2627,则您应该希望到达此页面1,这表明消息将始终涉及重复的键冲突(请注意哪些部分已参数化,哪些没有参数化):
Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.
1与@ 2020-06-18一样,数据库引擎错误和事件将是转到的正确页面