SqlBulkCopy进入具有复合主键的表

时间:2009-10-09 21:06:52

标签: c# .net sql sql-server-2005 sqlbulkcopy

我正在尝试使用SqlBulkCopy通过在我的应用程序中手动填充DataTable来将新行插入到我的数据库表中。

这适用于所有表,但具有由3列组成的复合主键的表除外。每当我尝试将SqlBulkCopy任何内容放入此表时,我都会收到以下错误:

Violation of PRIMARY KEY constraint 'PK_MYCOMPOSITEKEY'. Cannot insert duplicate key in object 'dbo.MyTable'.
The statement has been terminated.

这甚至可能吗?

我尝试使用以下内容设置DataTable的主键:

dt.PrimaryKey = new[] {dt.Columns["PKcolumn1"], dt.Columns["PKcolumn2"], dt.Columns["PKcolumn3"]};

但又一次,没有运气。

3 个答案:

答案 0 :(得分:1)

问题在于数据。

在输入文件中有

之一或两者

在e pk列中具有与表中已有的数据相同的行

该文件至少有两行具有相同的pk列值

答案 1 :(得分:1)

批量插入登台表。清理任何重复的记录。然后使用直接SQL进行插入。编写插入代码时,请确保将其限制为临时表中不在prod表中的记录。

答案 2 :(得分:1)

在点击数据库之前,您应该验证批量的批量数据,问题也可能存在(不只是与现有约束冲突,或者在数据库中记录)。它确实有效,报告通常是正确的。

尽管如此,DataSet甚至DataReader的整个展示都是一个混乱的映射练习,糟糕的无类型设计,大量不必要的转换,分配,基于对象[]的值,整个事物变成了顺序,类型和字符串依赖的混乱(只有MS可以设计和保持设计的东西。另一方面,原生OLEDB批量接口更清晰。