c# - 在 .net 中处理数据库异常

标签 c# sql-server exception

当我们可以捕捉到如下异常时:违反唯一键约束'IX_Product'。无法在对象“产品”中插入重复键。 (2627)
挑战在于如何将索引名称 IX_Product 解密为成员(即我不想将消息子字符串化)。一张表上可能有多个唯一约束,我们需要知道哪一个可以向用户提供更详细的信息。最好将其捕获为 DbException,因此它不是特定于 SQL Server 的。有没有办法在不解析字符串的情况下从异常中获取受影响的索引?

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

最佳答案

您必须:

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

关于c# - 在 .net 中处理数据库异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398002/

相关文章:

c# - Tpl 的延续和异常(exception)?

sql - 警告 SQL71502 - 过程 <名称> 具有对对象 <名称> 的未解析引用

c# - 每个数据库单元保存多个项目

java - TestNG预期异常处理: Have my cake as well as eat it?

c# - 如何使用此策略更改 Silverlight 应用程序的 URL?

c# - 创建 C# 绑定(bind)

sql - 将 SQL 查询中的值除以 1024 以获得以 KB 为单位的大小

c++ - 如果你不应该在析构函数中抛出异常,你如何处理其中的错误?

python - 在ipython终端窗口点击生成MouseEvenT类型.MOUSE_DOWN异常

c# - 如果使用设置,Moq 模拟调用将返回 null