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

标签 sql-server exception unique-constraint duplicate-data

假设您的 MSSQL 2008 数据库中存在唯一索引约束违规,如下所示:

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

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

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

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

使用具有自定义退出代码的 RETURN 来完成这项工作,或者不断调用特殊的存储过程来检查重复项,这并不会让我感到高兴。

最佳答案

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

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

但是,查找特定的错误编号可能有点麻烦 - 对于重复 key ,错误编号为 2627。

关于sql-server - 需要一种方法来拦截 MSSQL 中的重复键异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102138/

相关文章:

sql - 计算每天的状态 ID

PHP MySQL INSERT 由于唯一约束而失败

mysql - MySQL 的高级唯一约束

java - Spring-JPA-data保存实体UNIQUE INDEX(两列,不是pk)违反不能抛出异常

sql-server - SQL Azure V12 BACPAC 导入错误 : "The internal target platform type SqlAzureV12DatabaseSchemaProvider does not support schema file version ' 3. 5'."

java - 方法 executeQuery() 不能接受 PreparedStatement 或 CallableStatement 的参数。错误

c# - 为多行 SQL 创建唯一 ID

java - 为什么在 Java 中会出现 NoClassDefFoundError 异常?

exception - Spock - 使用数据表测试异常

java - 索引 17 附近的非法字符范围