在 .net 中处理数据库异常

3 c# sql-server exception-handling

当我们能够捕获异常,如: Violation of UNIQUE KEY constraint 'IX_Product'. Cannot insert duplicate key in object 'Product'. (2627)
挑战在于如何将索引名称 IX_Product 拆分为成员(即我不想将消息子串出来)。一张表上可能有多个唯一约束,我们需要知道哪一个可以向用户提供更详细的信息。最好将它作为 DbException 捕获,这样它就不是 SQL Server 特定的。有没有办法从异常中获取受影响的索引而不必解析字符串?

我想出但尚未测试的唯一解决方案是使用存储过程并在其中捕获错误并从存储过程返回更详细的消息。但我相信这仍然会有问题。

Cha*_*ana 5

您必须:

  1. 编码您的客户端组件以识别每个插入/更新语句可能会引发异常的约束名称,
  2. 重命名所有约束,以便它们以您希望在客户端代码中使用它们的方式“解密”,或者...
  3. 在尝试插入/更新之前检查存储过程中的所有约束,如果检查失败,则在过程中抛出(引发)您自己的自定义异常,在尝试插入更新并让约束创建异常之前......