SqlBulkCopy进入具有复合主键的表

.net c# sql sqlbulkcopy sql-server-2005

我正在尝试使用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"]};

但又一次,没有运气。

一般承认的答案

你遇到的问题是数据。

在输入文件中有一个或两个

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

要么

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


热门答案

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

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因