Сопоставление столбцов в DataTable таблице SQL с помощью SqlBulkCopy

Я хотел бы знать, как я могу сопоставить столбцы в таблице базы данных в DataTable в C# добавление данных в базу данных.

using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
    s.DestinationTableName = destination;
    s.WriteToServer(Ads_api_ReportData);
}

5 ответов


вы, вероятно, нужно что-то вроде

 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:как использовать SqlBulkCopyColumnMappingCollection? . .

Seel также http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy


было бы полезно знать, что Если столбцы в исходном запросе (или таблице) и целевой таблице имеют то же имя и тот же самый порядок, то есть нет необходимости записывать сопоставления явно, потому что SqlBulkCopy создаст сопоставление по умолчанию с этим порядком по умолчанию.


это стало настолько распространенной задачей, что я написал этот помощник для него:

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

Так как я создавал DataTable Я сам назвал его столбцы так же, как таблицу SQL.


использовать ColumnMappings:

s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");

метод Add on ColumnMappings collection позволяет сопоставлять столбцы из исходной таблицы в целевую таблицу. Метод ColumnMappings.Add принимает четыре разных способа сопоставления столбцов.

SQLBulkCopy очень строг по типу данных обоих столбцов, которые вы должны учитывать при добавлении его в коллекцию ColumnMappings