Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net OLEDBEException下捕获特定异常-2147467259_.net_Sql_Vb.net_Error Handling_Oledb - Fatal编程技术网

.net OLEDBEException下捕获特定异常-2147467259

.net OLEDBEException下捕获特定异常-2147467259,.net,sql,vb.net,error-handling,oledb,.net,Sql,Vb.net,Error Handling,Oledb,我有一个使用OleDB连接Access数据库的应用程序。我试图为插入重复记录创建一些错误处理,其中有一个唯一的索引 当抛出此错误时,我在异常中得到错误代码-2147467259。但是,其他错误也会给出相同的错误代码;例如,数据库已满或缺少列 有没有一种方法可以在不使用错误消息本身的情况下确定这些不同的错误,我的每一部分都说错误消息本身是不可靠的 我已经研究了.innerexception,在插入重复项的情况下,没有内部异常 我还研究了.SQLState属性,它似乎是一个旧方法,在4.0框架中并不

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

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

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

我已经研究了
.innerexception
,在插入重复项的情况下,没有内部异常

我还研究了.SQLState属性,它似乎是一个旧方法,在4.0框架中并不真正使用。我可以应用这个,但我可能会使用on error,而不是我想要的try-catch

我现在的代码是:

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

            End Try

冒着成为那个坚持认为你的根本问题才是真正问题的人的风险。。。DB才是真正的问题

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

我看到了与此类似的逻辑,一位同事将save方法实现为:

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

这是。。。糟糕

捕获一般错误,然后执行查询以检查是否存在具有相同ID的另一条记录。@Adriano好的,我将对此进行研究。我仍然觉得在这段代码下的其他一些错误上可能有问题。欢迎使用SO:)。该表保存测试数据,唯一键是日期/时间。捕获重复密钥的尝试是为了避免用户输入重复数据。我觉得这不是一个基本问题。谢谢:)数据是基于其他字段还是基于日期时间复制的?我不是指DBMS,但从逻辑上讲,是什么使它重复?重复是基于日期时间的,每次应该只有一条记录。这些副本将由导入相同数据的人创建两次。好的,我不认为您尝试执行的操作有特殊的例外。我可以建议你写一个程序来打电话吗?然后,您可以添加一个事务来检查您的保存操作是插入还是更新。是的,我认为没有特定的异常,在这个异常上捕获了2个以上的错误。我想要一个确定抛出哪个的方法。此表永远不会有更新查询,只有insert/delete。谢谢你的帮助,我想我有一个解决方案,如果可行的话,我会回答的。