2009-10-09 3 views
3

Я пытаюсь использовать SqlBulkCopy для вставки новых строк в мою таблицу DB путем ручного заполнения DataTable с моим приложением.SqlBulkCopy в таблицу с составным первичным ключом

Это прекрасно работает для всех таблиц , за исключением таблицы с составным первичным ключом, состоящим из 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"]}; 

но опять же, не повезло.

ответ

1

Проблема у вас есть с данными.

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

подряд, который имеет те же данные в столбцах электронной рк, как у вас уже есть в таблице

или

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

+0

Вот что я и думал. Тем не менее, я ограничил вставку одной строкой значений, которые я знаю **, еще не находятся в таблице базы данных. – kamens

+0

Датбаза думает, что это - какие значения? – Mark

+0

Вы и Майкара верны. Я использую Linq-to-SQL, и во время DB.SubmitChanges(), который вставлял эти внешние строки перед SqlBulkCopy, на моем пути выполнения ходил во внешнем ключе, хотя я явно не добавлял строки самих себя. – kamens

1

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

1

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

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

Смежные вопросы