C # Как вставить несколько строк в базе данных с первичным ключом - PullRequest
1 голос
/ 16 апреля 2011

Раз в месяц я получаю XML-файл с информацией о счетах клиентов за последний месяц.Мне нужно хранить эту информацию в базе данных.У меня есть таблица с именем transactions.Мой первичный ключ - customers_nr.В настоящее время, когда я вставляю данные, я получаю ошибку

нарушение первичного ключа ......

Я использую адаптер таблицы для вставки,В основном мне нужно только продолжать заполнять базу данных информацией.Так есть ли команда для обработки этого?Или как мне сделать

Пример информации

customer_nr: 12345
Billing_name: Microsoft
Billing_city: Seattle
Billing_amount 300
Billing_name: Mcdonalds
Billing_city: Seattle
Billing_amount 25

customer_nr: 4321
Billing_name: Ikea
Billing_city: New York
Billing_amount 1200

Ответы [ 3 ]

2 голосов
/ 16 апреля 2011

Ошибка означает, что у вас есть дублирующее значение для вашего первичного ключа как минимум в двух записях.

помните, что первичный ключ обеспечивает уникальность данных внутри него.

, поэтому вы не можете вставить две записи в таблицу с одинаковым значением для первичного ключа. вы можете изменить свой первичный ключ на новое поле (например, поле автоматического нумерации), чтобы вы удалили ограничение уникальности из старого поля первичного ключа, а затем можете вставить в него дубликаты!

0 голосов
/ 16 апреля 2011

дата и время выставления счета я больше подхожу для первичного ключа в этом отношении, альт. customer_nr + billing_datetime.

Если у вас нет даты и времени для выставления счета или вы просто знаете месяц, вы можете использовать customer_nr, year, month в качестве составного первичного ключа.

0 голосов
/ 16 апреля 2011

В таком случае использование номера клиента, очевидно, не является уникальным значением, то есть его нельзя использовать в качестве первичного ключа.

Создайте столбец IDENTITY или используйте GUID с newsequentialid() (предпочтительно в качестве поля по умолчанию), чтобы получить уникальный ключ в таблице.


Пример:

Структура вашей базы данных выглядит следующим образом:

  • TransactionID (Это новое поле, uniqueidentifer с newsequentialid() в качестве значения по умолчанию)
  • Customer_Nr
  • Billing_name
  • Billing_city
  • Billing_amount
  • Billing_name
  • Billing_city
  • Billing_amount

Затем вы должны сделать следующее:

INSERT INTO transactions (Customer_Nr, Billing_name, Billing_city, Billing_amount)
VALUES ('12345', 'Microsoft', 'Seattle', 300);

Как видите, вам не нужно менять код со значениями из-за автоматически сгенерированного (уникального) значения первичного ключа.


Примечание относительно newsequentialid() заключается в том, что если ваши данные требуют безопасности / конфиденциальности, не используйте newsequentialid(), так как тривиально угадать последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...