当我们可以捕捉到如下异常时:违反唯一键约束'IX_Product'。无法在对象“产品”中插入重复键。 (2627)
。
挑战在于如何将索引名称 IX_Product 解密为成员(即我不想将消息子字符串化)。一张表上可能有多个唯一约束,我们需要知道哪一个可以向用户提供更详细的信息。最好将其捕获为 DbException,因此它不是特定于 SQL Server 的。有没有办法在不解析字符串的情况下从异常中获取受影响的索引?
我提出但尚未测试的唯一解决方案是使用存储过程并在其中捕获错误并从存储过程返回更详细的消息。但我相信这仍然会有问题。
最佳答案
您必须:
- 将您的客户端组件编码为 识别约束名称 每个插入/更新语句可能 抛出异常,
- 重命名您的所有约束,以便它们以您希望在客户端代码中使用它们的方式“可破译”,或者...
- 在尝试插入/更新之前检查存储过程中的所有约束,如果检查失败,则在过程中抛出(引发)您自己的自定义异常,然后再尝试插入更新并让约束创建异常...
关于c# - 在 .net 中处理数据库异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398002/