Hallo,
ich habe ein Problem und kann mir dieses nicht erklären, ich hoffe der Bereich hier ist der richtige.
Ich habe wie der Titel sagt eine Methode die eine Datatable annimmt und diese über Transaction und Bulkcopy in die DB schereiben soll.
Wenn ich die Methode verwende gehen mir random Daten verloren bzw. werden nur Teile der Table gespeichert. Wenn ich die Methode ein zweites mal mit den restlichen Daten aufrufe, werden diese dann auch gespeichert.
Ist der Code korrekt oder macht man das anderst?
ich habe ein Problem und kann mir dieses nicht erklären, ich hoffe der Bereich hier ist der richtige.
Ich habe wie der Titel sagt eine Methode die eine Datatable annimmt und diese über Transaction und Bulkcopy in die DB schereiben soll.
Code:
public int DataTableBulkInsert(DataTable table) { SqlTransaction tran = null; SqlConnection conn = null; try { using ( conn = new SqlConnection( ConfigurationManager.ConnectionStrings[ "ConnectionString"] .ConnectionString)) { conn.Open(); using (tran = conn.BeginTransaction()) { using (var bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, tran)) { foreach (DataColumn dcPrepped in table.Columns) bulkCopy.ColumnMappings.Add(dcPrepped.ColumnName, dcPrepped.ColumnName); bulkCopy.BatchSize = 3000; bulkCopy.DestinationTableName = table.TableName; bulkCopy.WriteToServer(table); } tran.Commit(); return 1; } } } catch (Exception ex) { if (tran != null) tran.Rollback(); CommonFunctions.WriteException(ex, "XXXXXXXX"); return 0; } finally { if (conn != null) conn.Close(); } }
Ist der Code korrekt oder macht man das anderst?
Comment