당신은 그것의 새 인스턴스를 만들 필요가 없습니다 않음 - 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<string>
또는 이와 비슷한 함수를 함수에 전달하는 것이 좋습니다. 예를 들어 :
var columnMapping = new List<string>();
columnMapping.Add("field1,field3");
columnMapping.Add("foo,bar");
는 다음과 같은 이상에만 얻을 당신이 bulkCopy.ColumnMappings에 SqlBulkCopyColumnMappingCollection를 추가 할 수 없습니다
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);
}
}
으로 기능을 다시 정의합니다. bulkCopy.ColumnMappings의 Add 메소드를 사용하여 한 번에 하나씩 매핑을 추가 할 수 있습니다. – iTSrAVIE