这让我有点困扰。
我有一个C#app将数据插入MSSQL数据库。 它正在使用实体linq
列[id]是主键,没有自动增加。
现有数据如:
id other columns
1001 ......
1002 ......
1003 ......
然后我得到新数据:
ROW1: 1003 .......
ROW2: 1004 .......
ROW3: 1005 .......
1003已经存在,所以ROW1肯定会返回“Duplicate key 1003 error” 但是,当我试图插入其他像 1004,1005他们没有现成
该程序还会返回“重复密钥 1003 错误”, 并且无法插入。
然后我尝试数据库将sql客户端,只需插入一个'1004',它将通过。
我在想是这种插入缓冲区, 或者像'无或全部'架构?
那我该怎么办呢?我的代码是循环,
插入一行然后使用dbconn.savechange()
答案 0 :(得分:0)
这是全有或全无。从数据库中读取ID并手动删除重复的条目。
我建议检查最小值和最大值,然后读取它们之间的值。这样您就不必再读取所有ID了。
由于开销,这应该比尝试一次插入一个条目并检查错误更快。
答案 1 :(得分:0)
在你正在插入这个新的记录/行作为一个批处理然后在任何错误的情况下整个批处理将是ROLLBACK但是如果你将这些记录作为单独的批处理插入,那么带有throw和错误以及sql执行的1003将继续执行其余的sql语句。
答案 2 :(得分:0)
谢谢你们所有人。
我找到了一个解决方案,就是这样 当我发现Duplicate键错误第一次出现时。 这意味着真正的重复密钥。
我通过以下方式重新建立数据库连接:
dbconn.Dispose();
dbconn = new Entities();
然后这将起作用
非常感谢! 希望这会有助于其他人