cho*_*bo2 12 .net c# sqlbulkcopy columnmappings
我想通过参数传递特定数据,制作一个可用于所有批量插入的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);
}
}
Run Code Online (Sandbox Code Playgroud)
gor*_*ric 21
您不需要创建它的新实例 - 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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
根据评论,目标是制作通用函数,例如,不必在函数中明确地硬编码映射.由于无法实例化ColumnMappingCollection,我建议将List<string>包含列映射定义的一个或类似的函数传递给函数.例如:
var columnMapping = new List<string>();
columnMapping.Add("field1,field3");
columnMapping.Add("foo,bar");
Run Code Online (Sandbox Code Playgroud)
然后将函数重新定义为
public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize, List<string> 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);
}
}
Run Code Online (Sandbox Code Playgroud)