Hay ocasiones en las cuales se solicita por parte del usuario el envió de alertas o reportes vía correo electrónico, por lo cual una opción rápida de desarrollar y sin tener que crearla del lado de la aplicación es mediante SQL SERVER, pero para esto creándolo con formato HTML y en este caso utilice una cuadricula para mostrar los resultados, pero pueden aplicar cualquier etiqueta deseada de html en el envió del correo.
Los pasos a seguir son:
1-declaramos una variable, la cual contendrá la información con las etiquetas html:
DECLARE @tablaHTML NVARCHAR(MAX) ;
2-cargamos la variable con los datos a enviar:
SET @tablaHTML =
N'<H1>Titulo deseado del reporte</H1>' +
N'<table border="1">' +
N'<tr><th>Columna1</th><th>columna2</th>' +
N'<th>columna3</th>' +
N'</tr>' +
CAST ( ( SELECT td = Columna1, '',
td = Columna2, '',
td = Columna3, ''
From dbo.TablaDeDatosDeseados
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
3-Ejecutamos el procedimiento almacenado que envía el correo, con el cuerpo del mensaje pasando la variable que contiene nuestra consulta de la tabla
EXEC msdb.dbo.sp_send_dbmail @recipients='destinatario@tudominio.com',
@profile_name = 'EmailPrueba',@subject = 'Reporte en HTML',
@body = @tablaHTML,
@body_format = 'HTML';
miércoles, 14 de diciembre de 2011
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:
jueves, 27 de octubre de 2011
Aumentar tiempo de espera(TIMEOUT) de un dataset en VB.NET
En este post voy a describir los pasos a seguir para aumentar el timeout a un dataset de vb.net, como es de conocimiento general, un dataset creado en modo de designer es muy util, ya que evita desarrollar su estructura, ademas es muy rápido de desarrollar sin necesidad de mucho código tipeado, la gran desventaja es que no podemos establecer la propiedad del timeout, y en una consulta un poco extensa nos dará como resultado un timeout.
A continuación les mostrare la solución a este detalle.
Primer paso sera crear un dataset:
Ya teniendo el dataset creado le daremos doble click al tableadapter en este caso sera darle el doble click a Fill,GetData(), con lo cual nos desplegara la clase parcial publica del tableadapter:
luego agregaremos el código siguiente que corresponde a crear la propiedad del commandtimeout:
Y para poder implementar este dataset y utilizar la propiedad del commandtimeout, se crea una instancia del tableadapter al cual se le creo esta propiedad, como veremos a continuación:
Y con esto ya tenemos un dataset al cual podremos asignarle el timeout deseado y no el establecido por default.
Espero sea de utilidad el minitutorial.
Si tienen alguna duda con gusto se le aclarara.
A continuación les mostrare la solución a este detalle.
Primer paso sera crear un dataset:
Ya teniendo el dataset creado le daremos doble click al tableadapter en este caso sera darle el doble click a Fill,GetData(), con lo cual nos desplegara la clase parcial publica del tableadapter:
luego agregaremos el código siguiente que corresponde a crear la propiedad del commandtimeout:
Y para poder implementar este dataset y utilizar la propiedad del commandtimeout, se crea una instancia del tableadapter al cual se le creo esta propiedad, como veremos a continuación:
Y con esto ya tenemos un dataset al cual podremos asignarle el timeout deseado y no el establecido por default.
Espero sea de utilidad el minitutorial.
Si tienen alguna duda con gusto se le aclarara.
Suscribirse a:
Entradas (Atom)