Verstöße gegen die Primärschlüsselgrenze $ id '. Der doppelte Schlüssel in Objekt 'dbo.Anaintbl' < /p>
< /blockquote>
Ich habe die verschiedenen Instanzen dieses Fehlers durchsucht und keine gefunden, die anscheinend gleich zu sein scheint. Meine Daten haben nicht den PK -Wert, der beim Erstellen des Servers diese automatisch erstellt, aber es scheint immer noch zu versuchen, vorhandene PK -Werte zu verwenden. Die Daten sind rund 550.000 Zeilen pro Monat mit 54 Spalten. < /P>
Hier ist mein Code: < /p>
Code: Select all
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>
Um das [url=viewtopic.php?t=15738]Problem[/url] vorzuführen, habe ich es so eingerichtet, dass ich meine Upload -Datei in kleinere Tabellen aufteilte und sie dann in den oben genannten Upload -Prozess sende. Wenn der Prozess auf die PK-Verstöße trifft, rollt die Transaktion zurück und die Tabelle wird in einer Liste gespeichert, die später neu bearbeitet wird. Die Duplikate stammen aus vorhandenen Daten und nicht aus Daten, die während dieser Uploads erstellt wurden. von SQLBulkCopyOptions.Keepidentity