-1

这让我困扰了一段时间。

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

4

3 回答 3

0

在您将此新记录/行作为一个批次插入时,如果出现任何错误,整个批次将被回滚,但如果您将每个语句的这些记录作为单独的批次插入,则 1003 带有 throw 和错误,sql 执行将继续执行其余的sql语句。

于 2013-10-15T20:52:49.027 回答
0

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

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

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

于 2013-10-15T20:49:26.570 回答
0

感谢大家。

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

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

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

那么这将起作用

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

于 2013-10-15T21:43:34.253 回答