Как использовать SqlBulkCopyColumnMappingCollection?
Я хочу сделать один метод SqlBulkCopy, который я могу использовать для всех моих массовых вставок, передавая определенные данные через параметры.
теперь мне нужно сделать отображение на некоторых из них. Я не знаю, как сделать SqlBulkCopyColumnMappingCollection, так как это был мой план передать в коллекцию сопоставления и использовать ее. Однако я не знаю, как это сделать. Я не могу сделать из этого новый объект.
Это то, что у меня есть сейчас. Как я могу добавить его сделать mapping put pass it внутрь?
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);
}
}
1 ответов
вам не нужно создавать новый экземпляр - класс 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);
}
}
EDIT:
на основе комментариев цель состояла в том, чтобы сделать общую функцию, например, не нужно жестко кодировать отображение явно в функции. Поскольку экземпляр ColumnMappingCollection не может быть создан, я бы рекомендовал передать List<string>
или аналогичный, который содержит определение сопоставления столбцов в функция. Например:
var columnMapping = new List<string>();
columnMapping.Add("field1,field3");
columnMapping.Add("foo,bar");
затем повторно определить функцию
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);
}
}