Сопоставление столбцов в таблице данных с таблицей SQL с помощью SqlBulkCopy
Я хотел бы знать, как я могу сопоставить столбцы в таблице базы данных с таблицей данных в С# перед добавлением данных в базу данных.
using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
s.DestinationTableName = destination;
s.WriteToServer(Ads_api_ReportData);
}
Ответы
Ответ 1
Вам, вероятно, понадобится нечто вроде
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);
}
}
Ссылка: Как использовать SqlBulkCopyColumnMappingCollection?
,
.
Seel также http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
Ответ 2
Это стало настолько распространенной задачей, что я написал для этого помощника:
public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
{
foreach (DataColumn column in dt.Columns)
{
sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
}
Поскольку я сам создавал DataTable
, я назвал его столбцы так же, как и таблицу SQL.
Ответ 3
Возможно, было бы полезно знать, что , если столбцы в исходном запросе (или таблице) и целевой таблице имеют одноименное имя и находятся в точный порядок, тогда не нужно явно выписывать сопоставления, потому что SqlBulkCopy
создаст сопоставление по умолчанию с этим порядком по умолчанию.
Ответ 4
Используйте ColumnMappings:
s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");
Ответ 5
Метод Добавить в коллекцию ColumnMappings позволяет сопоставлять столбцы из исходной таблицы в таблицу адресатов. Метод ColumnMappings.Add принимает четыре разных способа сопоставления ваших столбцов.
SQLBulkCopy очень строг по типу данных обоих столбцов, которые вы должны учитывать при добавлении его в коллекцию ColumnMappings