SqlBulkCopy в таблицу с составным первичным ключом - PullRequest
3 голосов
/ 10 октября 2009

Я пытаюсь использовать 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 ]

1 голос
/ 10 октября 2009

Массовая вставка к промежуточному столу. Очистите любые дубликаты записей. Затем сделайте вставку, используя прямой SQL. При написании кода вставки обязательно ограничьте его записями в промежуточной таблице, которых нет в таблице prod.

1 голос
/ 10 октября 2009

Вы должны проверить ваши объемные данные на наличие копий до того, как вы попадете в БД, проблема может быть и там (не просто конфликт с существующим ограничением или запись в БД). Это работает, и обычно правильно сообщить об этом.

Тем не менее, весь показ DataSet или даже DataReaders - это грязное упражнение в отображениях, плохом типизированном дизайне, множестве ненужных преобразований, распределений, значений на основе объекта [], и все это становится беспорядком, типом и строкой ( что-то, что только MS могла спроектировать и продолжает проектировать). Собственные интерфейсы OLEDB с другой стороны намного чище.

1 голос
/ 10 октября 2009

Проблема с данными.

Во входном файле есть один или оба

строка, которая содержит те же данные в столбцах e pk, что и вы уже в таблице

или

В файле есть как минимум две строки с одинаковыми значениями столбцов pk

...