重复键错误

时间:2013-10-15 20:44:59

标签: c# sql sql-server linq primary-key

这让我有点困扰。

我有一个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()

3 个答案:

答案 0 :(得分:0)

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

我建议检查最小值和最大值,然后读取它们之间的值。这样您就不必再读取所有ID了。

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

答案 1 :(得分:0)

在你正在插入这个新的记录/行作为一个批处理然后在任何错误的情况下整个批处理将是ROLLBACK但是如果你将这些记录作为单独的批处理插入,那么带有throw和错误以及sql执行的1003将继续执行其余的sql语句。

答案 2 :(得分:0)

谢谢你们所有人。

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

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

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

然后这将起作用

非常感谢! 希望这会有助于其他人