如何使用SqlBulkCopyColumnMappingCollection?

我想通过参数传递特定数据,制作一个可用于所有批量插入的SqlBulkCopy方法。

现在我需要对其中一些进行映射。 我不知道如何制作SqlBulkCopyColumnMappingCollection,因为那是我计划传递映射集合并使用它。 但是我不知道如何制作它。 我不能成为它的新对象。

这就是我现在拥有的。 如何添加它做映射把它传递进去?

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; // Finally write to server sbc.WriteToServer(dtInsertRows); } } 

您不需要创建它的新实例 – SqlBulkCopy类有一个属性,它是您可以使用的映射集合:

 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); } } 

编辑:

根据评论,目标是制作通用函数,例如,不必在函数中明确地硬编码映射。 由于无法实例化ColumnMappingCollection,我建议将包含列映射定义的List或类似函数传递给函数。 例如:

 var columnMapping = new List(); columnMapping.Add("field1,field3"); columnMapping.Add("foo,bar"); 

然后将函数重新定义为

 public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize, List columnMapping) { // 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 foreach(var mapping in columnMapping) { var split = mapping.Split(new[] { ',' }); sbc.ColumnMappings.Add(split.First(), split.Last()); } // Finally write to server sbc.WriteToServer(dtInsertRows); } }