Подтвердить что ты не робот

Вставка SqlBulkCopy с колонкой Identity

Я использую объект SqlBulkCopy, чтобы вставить пару миллионов сгенерированных строк в базу данных. Единственная проблема заключается в том, что таблица, в которую я вставляю, имеет столбец идентификатора. Я попытался установить SqlBulkCopyOptions на SqlBulkCopyOptions.KeepIdentity и установить столбец идентификатора 0 ', DbNull.Value и null. Ни один из них не сработал. Я чувствую, что мне не хватает чего-то довольно простого, если кто-то может просветить меня, что было бы фантастически. Спасибо!

edit Чтобы уточнить, у меня нет идентификационных значений, установленных в DataTable Я импортирую. Я хочу, чтобы они были сгенерированы как часть импорта.

edit 2   Вот код, который я использую для создания базового объекта SqlBulkCopy.

SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;

private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = 
    SqlBulkCopyOptions.Default) 
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
    string connString =
    cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
    return new SqlBulkCopy(connString, options);
}
4b9b3361

Ответ 1

Чтобы таблица назначения назначала идентификатор, не используйте параметр SqlBulkCopyOptions.KeepIdentity. Вместо этого не сопоставляйте личность с источником и не извлекайте его из источника для отправки до SqlBulkCopy.

Ответ 2

Заполните the ColumnMapping (см. this) объекта BulkCopy и не сопоставьте столбец идентификатора. Столбец идентификатора будет создан целевой базой данных.

Ответ 3

У вас есть два варианта -

1 - используйте KeepIdentity и сохраните исходные значения Identity.

2 - Не сопоставляйте поле Identity. Если вы не пытаетесь присвоить значение, целевая таблица будет назначать его автоматически.

Ответ 4

Да, вы правы, используя параметр SqlBulkCopyOptions.KeepIdentity, тогда писатель с объемной копией не думает, что то, что у вас есть в структуре таблицы, этот объект пишет из стартового столбца, поэтому для нашей потребности я делаю то же самое, чтобы сохранить поле идентификации в моей таблице только вам нужно сделать дополнительный столбец в вашем datatable объекте с остальными необходимыми столбцами и передать нулевые значения в этот столбец, тогда таблица автоматически обрабатывает Identity.

Ответ 5

Причина: - В excel в конце данных были несколько пустых строк, которые, возможно, выглядели как пустые строки. Массовая загрузка пыталась загрузить эти пустые строки в таблицу.

Решение: - выберите только строки, содержащие данные - скопируйте данные на новый лист. Скажите, что у вас есть данные в "Листе 1", переместите его в "Лист 2" и удалите "Лист 1".

Ответ 6

В моем случае это оказалось пустое место внутри имени столбца, и в одном из столбцов я случайно использовал hyphon (-) вместо underscore (_) в моей таблице SQL. Я заменил пустое пространство и гифон символом подчеркивания в таблице sql и устранил проблему.