Zuordnen von Spalten in einer DataTable zu einer SQL-Tabelle mit SqlBulkCopy

Zuordnen von Spalten in einer DataTable zu einer SQL-Tabelle mit SqlBulkCopy

Sie brauchen wahrscheinlich so etwas wie

 public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Add your column mappings here
        sbc.ColumnMappings.Add("field1","field3");
        sbc.ColumnMappings.Add("foo","bar");

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }    
}

Ref:Wie verwende ich SqlBulkCopyColumnMappingCollection?..

Siehe auch http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy


Dies wurde zu einer so häufigen Aufgabe, dass ich diesen Helfer dafür geschrieben habe:

public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
{
    foreach (DataColumn column in dt.Columns)
    {
        sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName);
    }
}

Seit ich den DataTable erstellt habe Ich selbst habe die Spalten genauso benannt wie die SQL-Tabelle.


Es könnte nützlich sein, dieses if zu wissen die Spalten in der Quellabfrage (oder -tabelle) und der Zieltabelle haben den gleichen Namen und sind in genau derselben Reihenfolge , dann besteht keine Notwendigkeit, die Zuordnungen explizit auszuschreiben , weil SqlBulkCopy erstellt eine Standardzuordnung mit dieser Standardreihenfolge.