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