Ответ 1
Чтобы таблица назначения назначала идентификатор, не используйте параметр SqlBulkCopyOptions.KeepIdentity
. Вместо этого не сопоставляйте личность с источником и не извлекайте его из источника для отправки до SqlBulkCopy
.
Я использую объект 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);
}
Чтобы таблица назначения назначала идентификатор, не используйте параметр SqlBulkCopyOptions.KeepIdentity
. Вместо этого не сопоставляйте личность с источником и не извлекайте его из источника для отправки до SqlBulkCopy
.
Заполните the ColumnMapping
(см. this) объекта BulkCopy и не сопоставьте столбец идентификатора. Столбец идентификатора будет создан целевой базой данных.
У вас есть два варианта -
1 - используйте KeepIdentity
и сохраните исходные значения Identity
.
2 - Не сопоставляйте поле Identity
. Если вы не пытаетесь присвоить значение, целевая таблица будет назначать его автоматически.
Да, вы правы, используя параметр SqlBulkCopyOptions.KeepIdentity, тогда писатель с объемной копией не думает, что то, что у вас есть в структуре таблицы, этот объект пишет из стартового столбца, поэтому для нашей потребности я делаю то же самое, чтобы сохранить поле идентификации в моей таблице только вам нужно сделать дополнительный столбец в вашем datatable объекте с остальными необходимыми столбцами и передать нулевые значения в этот столбец, тогда таблица автоматически обрабатывает Identity.
Причина: - В excel в конце данных были несколько пустых строк, которые, возможно, выглядели как пустые строки. Массовая загрузка пыталась загрузить эти пустые строки в таблицу.
Решение: - выберите только строки, содержащие данные - скопируйте данные на новый лист. Скажите, что у вас есть данные в "Листе 1", переместите его в "Лист 2" и удалите "Лист 1".
В моем случае это оказалось пустое место внутри имени столбца, и в одном из столбцов я случайно использовал hyphon (-) вместо underscore (_) в моей таблице SQL. Я заменил пустое пространство и гифон символом подчеркивания в таблице sql и устранил проблему.