【问题标题】:Catch Specific Exceptions under OLEDBException -2147467259在 OLEDBException -2147467259 下捕获特定异常
【发布时间】:2013-07-14 16:42:17
【问题描述】:

我有一个使用 OleDB 连接到 Access 数据库的应用程序。我正在尝试为插入重复记录创建一些错误处理,其中存在唯一索引。

当抛出此错误时,我在异常中收到错误代码 -2147467259。然而,其他错误也会给出相同的错误代码;例如,数据库已满或列缺失。

有没有一种方法可以在不使用错误消息本身的情况下确定这些不同的错误,我的每个部分都说这是不可靠的。

我看过.innerexception,在插入重复的情况下没有内部异常。

我还查看了 .SQLState 属性,看来这是一个旧方法,并没有真正在 4.0 框架中使用。我可以应用它,但我可能会在错误时使用,而不是我想要的 try catch。

我现在的代码:

            Try
                Sender.cmdOLEDB.ExecuteNonQuery()
            Catch ex As OleDbException

            End Try

【问题讨论】:

  • 捕获一般错误然后执行查询以检查是否存在具有相同ID的另一条记录
  • @Adriano 好的,我会调查一下。仍然感觉我可能在此代码下的其他一些错误上遇到问题。

标签: .net sql vb.net error-handling oledb


【解决方案1】:

冒着成为那个坚持认为您的根本问题是这里真正问题的人的风险......数据库是这里的真正问题。

我假设你有某种自然键(否则你不会得到重复键异常)而不是生成的键。我建议更改表格,这样您就不必担心尝试找出由于 PK 错误而导致插入失败的原因。

我见过类似这种逻辑的东西,其中一位同事将保存方法实现为:

try
{
    insertCommand.ExecuteNonQuery();
}
catch(Exception ex)
{
    updateCommand.ExecuteNonQuery();
}

这……不好。

【讨论】:

  • 欢迎来到 SO :)。该表包含测试数据,唯一键是日期/时间。捕获重复键的尝试是为了避免用户输入重复数据。我不认为这是一个根本问题。
  • 谢谢 :) 数据是基于其他字段还是基于日期时间重复?我不是指 DBMS,但从逻辑上讲,是什么让它重复?
  • 副本是基于日期时间的,每次应该只有一条记录。这些重复项将由某人两次导入相同的数据而创建。
  • 好的,我不认为你正在尝试做的事情有一个特定的例外。我可以建议可能编写一个 proc 来调用吗?然后你可以添加一个事务来检查你的保存操作是插入还是更新。
  • 是的,我不认为有特定的异常,在这个异常上捕获了 2 个以上的错误我想要一种方法来确定抛出的异常。该表永远不会有更新查询,只有插入/删除。感谢您的帮助,我想我有一个解决方案,如果可行,我会回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2018-06-28
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
相关资源
最近更新 更多