txt transact mssql error ejemplos codepage c# sql datatable sqlbulkcopy

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");