SQL BulkCopy

Es muy interesante esta nueva funcion de Framework 2.0 que permite realizar inserciones masivas en un flash que tener que recorrer un datatable e ir insertando linea por linea.
Les paso el codigo, si tanto el orgien como el destino son iguales no hace falta realizar mapeamentos como yo lo hice en el codigo. Pero si el datatable es diferente que tu tabla se puede realizar mapeamento Ej: s.ColumnMappings.Add("telargo", "Ganador"); aca el campo del datatable telargo se mapea con el campo Ganador de la tabla en este caso GanadoresSorteo.

Se debe tener cuidado que los campos son case sensitivos es decir los campos deben estar escritos igualemtente como en el campo, incluyedo si esta en mayuscula o minuscula. Les comento eso porque me decia esto :
La ColumnMapping proporcionada no coincide con ninguna columna del origen o del destino. o en ingles,
The given ColumnMapping does not match up with any column in the source or destination

Mi mapeamento estaba asi s.ColumnMappings.Add("telargo", "ganador"); y deberia ser asi s.ColumnMappings.Add("telargo", "Ganador"); vieron el campo Ganador empeza con mayuscula porque asi esta en la tabla.


private void CopyData(DataTable sourceTable, SqlConnection destConnection)
{
// column mappings example:
destConnection.Open();
using (SqlBulkCopy s = new SqlBulkCopy(destConnection))
{
s.DestinationTableName = "GanadoresSorteo";
s.BulkCopyTimeout= 120;


s.ColumnMappings.Add("telargo", "Ganador");
s.ColumnMappings.Add("fecha", "fecha");
s.ColumnMappings.Add("fechasorteo", "fechasorteo");
s.ColumnMappings.Add("idservicio", "id_servicio");
s.ColumnMappings.Add("idsorteo", "id_sorteo");
s.ColumnMappings.Add("lugar", "id_premio");

s.WriteToServer(sourceTable);
s.Close();
}
destConnection.Close();
}

Hay varios parametros con sqlbulkcopy como s.BulkCopyTimeout= 120 que setea el tiempo de espera para la operacion completar, en caso que se inserte miles registros.Otra opcion es s.BatchSize que se puede configurar cuantos registros se procesa en cada copia, porque de lo contrario envia todos y esto puede dar timeout si son miles de registros.
Con esto espero que le haya incentivado el estudio de esta nueva clase.

Saludos
Adalberto Montania

Comentarios

Publicar un comentario