c# - transact - Asignar columnas en un DataTable a una tabla SQL con SqlBulkCopy
sql server bulk copy (5)
Me gustaría saber cómo puedo asignar columnas en una tabla de base de datos a la tabla de datos en c # antes de agregar los datos a la base de datos.
using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
s.DestinationTableName = destination;
s.WriteToServer(Ads_api_ReportData);
}
El método Agregar en la colección ColumnMappings le permite asignar sus columnas de la tabla de origen a la tabla de destino. El método ColumnMappings.Add acepta cuatro formas diferentes de asignar sus columnas.
SQLBulkCopy es muy estricto en cuanto al tipo de datos de las dos columnas que debe considerar al agregarlo a la colección ColumnMappings
Esto se convirtió en una tarea tan común que escribí este ayudante para ello:
public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
{
foreach (DataColumn column in dt.Columns)
{
sbc.ColumnMappings.Add(
new SqlBulkCopyColumnMapping(column.ColumnName, column.ColumnName));
}
}
Como yo mismo estaba creando el DataTable
, nombré sus columnas como la tabla SQL.
Probablemente necesitas algo como
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: ¿Cómo usar SqlBulkCopyColumnMappingCollection? . .
Seel también http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
Puede ser útil saber que si las columnas en la consulta de origen (o tabla) y la tabla de destino tienen el mismo nombre y están exactamente en el mismo orden , entonces no hay necesidad de escribir las asignaciones explícitamente , porque SqlBulkCopy
creará una asignación por defecto con este orden por defecto.
Utilice las ColumnMappings :
s.ColumnMappings.Add("Name", "Name");
s.ColumnMappings.Add("Address", "Address");