sábado, 29 de octubre de 2011

pasar parametro datatable desde vb.net a store procedure en sql server 2008

En ciertas situaciones se presenta un problema a la hora de pasar cantidades masivas de registros, a modo de ejemplo una vez me paso la situación en la cual era requerido leer un archivo de texto el cual era un estado de cuenta con el formato teleban, en el cual tenia la cantidad aproximada de 25.000 registros, y como todos sabemos una solucion habitual seria usar un store procedure, al cual se llamaria 25.000 veces para pasarle los campos como parametros mediante un ciclo que recorra este archivo o utilizar el sql bulk copy, pero ante esta solución se presentan dos inconvenientes, primero que no es muy recomendable ya que para validaciones necesarias, y otro aspecto es que se vuelve bastante lerdo este proceso (al implementarlo tomaba al rededor de 3 minutos para ingresar todos los registros a la base de datos), por lo cual empece a investigar en el msdn de microsoft, el cual me dio la solución perfecta para mi caso, el cual es usar el store procedure pero en vez de implementar parametros para cada uno de los campos que se van a registrar, se utilizara un parametro de tipo tabla, el cual desde el llamado que se hace desde vb.net, le pasaremos un datatable(el cual asombrosamente dura aproximadamente 2 segundos unicamente, increible no).
Pasamos ahora a demostrar como implementarlo:
1-Creamos en SQL SERVER un tipo de datos definido por el usuario:










2-Creamos una tabla para implementar nuestro ejemplo la cual recibira los datos del datatable que enviaremos desde vb.net:





















3-Se crea un store procedure para utilizar el tipo de datos tipo tabla que insertara los valores en nuesta tabla creada:























4 comentarios:

  1. ¿Y como le paso desde VB.Net el conjunto de datos?

    ResponderEliminar
  2. ya hice eso, y vb no me permite el tipo de dato, no lo reconoce... que hay que hacer para que vb lo reconozca como tipo de dato de sql, y nos vermita pasar la tabla como parametro a nuestro sp????

    ResponderEliminar
  3. gracias, ya supe como, por si les sirve a alguien, se necesita pasar como System.Data.SqlDbType.Structured , e indicar TypeName = 'dbo.tablaparametro'

    El unico inconveniente es que no se puede modificar.....

    :D

    ResponderEliminar
  4. chequen esto aqui se emplica bien
    http://devtroce.com/2012/10/01/enviar-paramarray-a-un-stored-procedure-en-sql-server/

    ResponderEliminar