Asignación de columnas en una tabla de datos a una tabla SQL con SqlBulkCopy

Me gustaría saber cómo podría asignar coloumns en una tabla de database a la tabla de datos en c # antes de agregar los datos a la database.

using (SqlBulkCopy s = new SqlBulkCopy(conn)) { s.DestinationTableName = destination; s.WriteToServer(Ads_api_ReportData); } 

Probablemente necesites 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 en el mismo order , entonces no hay necesidad de escribir explícitamente las asignaciones , porque SqlBulkCopy creará una asignación pnetworkingeterminada con este order pnetworkingeterminado.

Use los ColumnMappings :

 s.ColumnMappings.Add("Name", "Name"); s.ColumnMappings.Add("Address", "Address"); 

El método Add on ColumnMappings collection le permite mapear sus columnas de la tabla de origen a la tabla de destino. El método ColumnMappings.Add acepta cuatro forms diferentes de asignar sus columnas.

SQLBulkCopy es muy estricto con el tipo de datos de las columnas que debe tener en count al agregarlo a la colección ColumnMappings

Esto se convirtió en una tarea tan común que escribí esta ayuda 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 DataTable , nombré sus columnas como la tabla SQL.