重复键错误

本文关键字:错误 | 更新日期: 2023-09-27 18:35:35

这让我烦了一段时间。

我有一个 C# 应用程序将数据插入 MSSQL 数据库。它正在使用实体 LINQ

列 [id] 是主键,没有自动增加。

存在的数据,例如:

id       other columns
1001        ......
1002        ......
1003        ......

然后我得到新数据:

ROW1:   1003   .......
ROW2:   1004   .......
ROW3:   1005   .......
1003

存在,所以 ROW1 肯定会返回"重复键 1003 错误"但是,当我尝试插入其他类似1004,1005 他们不存在

程序还会向我返回"重复键 1003 错误",并且无法插入。

然后我尝试数据库将SQL客户端,只需插入一个"1004",它就会通过。

我在想的是这种插入缓冲区,还是像"无或全部"架构?

那我该怎么做呢?

我的代码是一个循环,插入一行,然后使用dbconn.savechange()

重复键错误

这是一个全有或全无。从数据库中读取 ID 并手动删除重复条目。

我建议检查最小值和最大值,并在它们之间读回值。这样,您就不必读回所有 ID。

由于开销,这应该比尝试一次插入一个条目并检查错误更快。

在您将这个新的记录/行作为一个批处理插入时,如果出现任何错误,整个批处理将被回滚,但是如果您将这些记录作为单独的批处理插入每个语句,那么 1003 带有抛出和错误以及 SQL 执行将继续执行其余的 sql 语句。

谢谢大家。

我找到了一个解决方案,那就是当我发现重复键错误第一次出现时。这意味着真正的重复密钥。

我通过以下方式重新建立数据库连接:

                dbconn.Dispose();
                dbconn = new Entities();

那么这将起作用

多谢!希望这对其他人有帮助