需要一种方法来拦截MSSQL中的重复键异常

Pau*_*aul 6 sql-server duplicate-data exception-handling unique-constraint

让我们假设你的MSSQL 2008数据库中有一个唯一的索引约束违规,如下所示:

Violation of PRIMARY KEY constraint 'PK_ManufacturerCode'. Cannot insert duplicate key in object 'dbo.ManufacturerCode'. The duplicate key value is (8410179)
Run Code Online (Sandbox Code Playgroud)

目前我正在通过胖客户端中的全局异常处理程序处理此异常(使用ADO在Delphi 6中编写,但无关紧要,我计划将来使用C#.NET)并将异常消息附加到日志框中.

但我想亲自处理这个特定的重复键异常,并在客户端使用胖客户端自己的文本显示相应的错误消息.我可以解析匹配的错误消息,但不会这样做有两个原因:

  • 这不是一个正确的方法 - 依靠一些错误代码更好;
  • 胖客户端旨在使用各种语言的各种MSSQL服务器版本,这些版本可能具有不同的错误文本

使用带有自定义退出代码的RETURN或不断调用特殊存储过程来检查重复项,这并不能让我高兴.

Dam*_*ver 4

Errors在 ADO 中,您可以在发生错误后访问连接属性,并检查该NativeError属性以获取 SQL Server 特定的错误号。

当您切换到 .NET 时,相同的数字将作为或Number的属性公开SqlExceptionSqlError

然而,查找特定的错误编号可能有点麻烦 - 对于重复密钥,错误编号为 2627。