Copias masivas a base de datos en 0,

La clase SqlBulkCopy, introducida como novedad en el Framework 2.0, resulta de gran utilidad para realizar inserciones de datos masivas. En  pruebas realizadas de inserciones desde tablas en memoria a SqlServer 2005 con más de 10.000 registros el rendimiento es espectacular: pasa de tardar algo más de 12 segundos con un comando de inserción sqlcommand a menos de medio segundo con SqlBulkCopy. Por supuesto cuantos más datos incluya la inserción mayor es la diferencia. Es de destacar que incluso para una inserción unitaria esta clase es como mímino tan rápida como utilizar un sqlcommand de inserción. Así que no debemos preocuparnos de si perderemos rendimiento por tener pocos registros, o ganamos o nos quedamos igual.

En el siguiente código se muestra un ejemplo de volcado de una tabla existente en memoria llamada DataTableOrigen en una tabla en el servidor llamada TablaDestino.

El mapeo de columnas permite asignar las columnas de la tabla origen con sus correspondientes en la tabla destino. Una observación a tener en cuenta: el mapeado de columnas es sensible a mayúsculas.

 

Dim bulk As New SqlBulkCopy(MyConnectionString)

bulk.DestinationTableName = «TablaDestino»

bulk.ColumnMappings.Add(«Col1Origen», «Col1Destino»)

bulk.ColumnMappings.Add(«Col2Origen «, «Col2Destino «)

bulk.ColumnMappings.Add(«Col3Origen «, «Col3Destino «)

 

bulk.WriteToServer(DataTableOrigen)

bulk.Close()

 

Podemos ajustar el tamaño de lote de inserción (mSqlBulkCopy.BatchSize) que trae por defecto. Las filas se enviarán al servidor en lotes de este número de filas. Eligiendo un tamaño adecuado se puede mejorar el rendimiento de la operación y se tiene un control más fino sobre las transacciones, que podemos definir para la operación entera o por lote.

Además se pueden controlar distintas configuraciones de copiado, como pueden ser si queremos deshabilitar los triggers que existieran en la tabla destino, bloquear la tabla, chequear Foreigs Keys…

Para más infomarmación sobre esta clase, podemos consultar la biblia.

Hola mundo

Nunca he sabido cómo se deben de empezar este tipo de cosas. Supongo que cuando uno ya lleva tiempo posteando lo difícil será parar, cosas de la inercia, pero en este punto cuesta elegir el artículo que esté a la altura del acontecimiento.

Así que para no equivocarme no pondré ninguno. Dedicaré este primer post a agradecer la colaboración de las personas que hicieron posible que pueda disfrutar de esta ventana de comunicación, en especial a Jose y a Rodrigo, y a plasmar la declaración de intenciones que regirán este blog.

Abundan en la blogsfera sitios de profetas y visionarios que nos asombran con las novedades de los próximos años,  C#4 y otras tecnologías venideras. Es muy recomendable conocer lo que nos depara el futuro inmediato, pero no menos importante son las pequeñas cosas que forman el día a día actual. Hablo de detalles, trucos, curiosidades que no suelen aparecer en este tipo de blogs, ya que una vez conocidas no encierran ningún misterio ni poseen el encanto de las tecnologías punteras. Cualquier programador de a diario sabrá lo largos que se hacen a veces esos 5 minutos que lleva publicar un nuevo sitio web, o la tarde en la que se hace de sobra esa nueva capa de datos para nuestra obsoleta aplicación que se convierte en semanas. Este tipo de problemas que sólo nos encontramos cuando programamos son los que intentaré publicar conforme vayan surgiendo en mi actividad, con la esperanza de que a alguien más le puedan ahorrar algún tiempo de googleo.

Agradecería que si alguien sacase provecho de sus lecturas, quisiese saber algo más sobre alguna publicación o simplemente pudiese aportar algo más al artículo,  me lo hiciese saber. Bien a través de este mismo medio o mediante email, estaré encantado de colaborar en lo que me sea posible.

Gracias de antemano a todos los lectores; como en todos los blogs, ¡vosotros sois los protagonistas!