Нарушение ограничения первичного ключа 'maintbl $ id'. Не могу вставить дубликат ключа в Object 'dbo.maintbl' < /p>
< /blockquote>
Я искал различные экземпляры этой ошибки и не нашел такую, которая, кажется, одинаковый. Мои данные не включают значение PK, поскольку сервер создает это автоматически, но он все еще пытается использовать существующие значения PK. Данные составляют около 550 000 строк каждый месяц с 54 столбцами. < /P>
Вот мой код: < /p>
Код: Выделить всё
private void RunSQLBulkCopy(DataTable table)
{
GlobalInfo.dbConn.Open();
using (SqlTransaction transaction = GlobalInfo.dbConn.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(GlobalInfo.dbConn, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.DestinationTableName = "MainTbl";
try
{
table.Columns.Cast().ToList().ForEach(x =>
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(x.ColumnName, x.ColumnName)));
bulkCopy.BatchSize = 5000;
bulkCopy.WriteToServer(table);
transaction.Commit();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
transaction.Rollback();
UploadFailedTables.Add(table);
}
}
}
if (GlobalInfo.dbConn.State == ConnectionState.Open)
{
GlobalInfo.dbConn.Close();
}
}
< /code>
Чтобы обойти проблему, я настроил ее, поэтому я разделяю свой файл загрузки на более мелкие таблицы, а затем отправляю их в процесс загрузки выше. Если процесс достигает нарушения PK, то транзакция откатится назад, и таблица хранится в списке, который затем перерабатывается позже. Но это требует многочисленных прогонов, поэтому сами данные, кажется, в порядке, но по какой -то причине автоматическое создание значений PK, кажется, используют дубликаты. Дубликаты взяты из существующих данных, а не данных, созданные во время этих загрузок. P> Из других вопросов, которые я прочитал, я попробовал несколько вариантов, например от sqlbulkcopyoptions.shipidentity
Подробнее здесь: https://stackoverflow.com/questions/794 ... constraint