重复键错误
本文关键字:错误 | 更新日期: 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();
那么这将起作用
多谢!希望这对其他人有帮助