使用SqlBulkCopy将DataTable中的列映射到SQL表

时间:2013-07-04 11:39:36

标签: c# sql datatable sqlbulkcopy

我想知道如何在将数据添加到数据库之前将数据库表中的列映射到c#中的数据表。

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

5 个答案:

答案 0 :(得分:35)

你可能需要一些像

这样的东西
 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);
    }    
}

参考:How to use SqlBulkCopyColumnMappingCollection?

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

答案 1 :(得分:10)

这成了一个常见的任务,我为它写了这个帮手:

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

由于我自己创建DataTable,因此我将其列命名为与SQL表相同。

答案 2 :(得分:6)

知道 if 源查询(或表)中的列与目标表中的同名并且在中可能很有用完全相同的顺序,然后无需明确写出映射,因为SqlBulkCopy将使用此默认顺序创建默认映射。

答案 3 :(得分:0)

使用ColumnMappings

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

答案 4 :(得分:0)

Add on ColumnMappings集合方法允许您将列从源表映射到目标表。 ColumnMappings.Add方法接受四种不同的方式来映射列。

SQLBulkCopy对于将这些列添加到ColumnMappings集合时必须考虑的两列的数据类型非常严格