Hola!
pues os voy a mostrar una manera sencilla de crear en T-SQL un procedimiento que realice una consulta de forma dinámica. ¿Para qué lo puedo utilizar? Pues por ejemplo, imagínate que tienes un formulario web con 3 campos para filtrar y que el formulario te permite filtrar por ninguno, uno, dos o los tres campos. En el caso que no queramos buscar por uno de los campos, le daremos valor -1.
Aquí os dejo el ejemplo del procedure:
CREATE PROCEDURE [dbo].[CONSULTA_FORMULARIO]
@ID1 INT,
@ID2 INT,
@ID3 INT
AS
BEGIN
DECLARE @SQL NVARCHAR(1000)
DECLARE @nID1 NVARCHAR(100)
DECLARE @nID2 NVARCHAR(100)
DECLARE @nID2 NVARCHAR(100)
SET @nID1 = ''
SET @nID2 = ''
SET @nID3 = ''
SET @SQL = 'SELECT * FROM TABLE_1, TABLE_2 WHERE PK_T1 = FK_T2 '
IF @ID1 = -1 SET @nID1 = 'AND ID1 = @ID1 '
IF @ID2 = -1 SET @nID2 = 'AND ID2 = @ID2 '
IF @ID3 = -1 SET @nID3 = 'AND ID3 = @ID3 '
SET @SQL = @SQL + @nID1 + @nID2 + @nID3
EXEC (@SQL)
END
Espero que os haya sido útil, saludos a todos!!!
jueves, 18 de junio de 2009
miércoles, 22 de abril de 2009
Función con Socket TCPClient para Recibir correo en .Net
Buenas!
aquí os dejo una función para poder recibir correo. En el Framework 2.0 de .Net, existe un namespace system.Net.Mail, que funciona muy bien (y sencillo de usar) para enviar correo, pero no para recibirlo. Para ello, nos construimos nosotros la trama y abriendo un socket con el protocolo TCP, podemos conectarnos al servidor de correo y leerlo.
Ahí va:
Sub Recibir()
Dim hostName As String = "pop.servidoredecorreo.com" 'Pon el hostname de tu servidor de correo entrante
Dim userName As String = "GRUPO\Usuario" 'Pon tu Grupo\Usuario
Dim userPassword As String = "Password" ' Pon tu Password
Dim tcpClient As Net.Sockets.TcpClient = New Net.Sockets.TcpClient
Dim messageNumber As String = "1"
Dim returnMessage As String
Dim sTemp As String
Try
tcpClient.Connect(hostName, 110)
Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream()
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
Dim sendBytes As Byte()
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("User " + userName + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("Pass " + userPassword + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("STAT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("RETR " + messageNumber + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
System.Threading.Thread.Sleep(500)
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
returnMessage = System.Text.Encoding.ASCII.GetString(bytes)
Console.WriteLine(returnMessage.ToString)
sendBytes = System.Text.Encoding.ASCII.GetBytes("QUIT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
tcpClient.Close()
Catch ex As Exception
Console.WriteLine("No se puede recibir correo o el buzon de entrada esta vacio")
End Try
End Sub
Espero que os haya sido útil!
Saludos!!
aquí os dejo una función para poder recibir correo. En el Framework 2.0 de .Net, existe un namespace system.Net.Mail, que funciona muy bien (y sencillo de usar) para enviar correo, pero no para recibirlo. Para ello, nos construimos nosotros la trama y abriendo un socket con el protocolo TCP, podemos conectarnos al servidor de correo y leerlo.
Ahí va:
Sub Recibir()
Dim hostName As String = "pop.servidoredecorreo.com" 'Pon el hostname de tu servidor de correo entrante
Dim userName As String = "GRUPO\Usuario" 'Pon tu Grupo\Usuario
Dim userPassword As String = "Password" ' Pon tu Password
Dim tcpClient As Net.Sockets.TcpClient = New Net.Sockets.TcpClient
Dim messageNumber As String = "1"
Dim returnMessage As String
Dim sTemp As String
Try
tcpClient.Connect(hostName, 110)
Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream()
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
Dim sendBytes As Byte()
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("User " + userName + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("Pass " + userPassword + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("STAT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
sendBytes = System.Text.Encoding.ASCII.GetBytes("RETR " + messageNumber + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
System.Threading.Thread.Sleep(500)
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
returnMessage = System.Text.Encoding.ASCII.GetString(bytes)
Console.WriteLine(returnMessage.ToString)
sendBytes = System.Text.Encoding.ASCII.GetBytes("QUIT" + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
tcpClient.Close()
Catch ex As Exception
Console.WriteLine("No se puede recibir correo o el buzon de entrada esta vacio")
End Try
End Sub
Espero que os haya sido útil!
Saludos!!
Etiquetas:
correo,
framework 2.0,
Mail,
socket,
vb.net
martes, 14 de abril de 2009
Devolver Datetime con la hora a cero
Hola compañeros!
Trabajando con una Base de datos SQL Server 2005, me encontré
con la necesidad de devolver un campo DateTime con la hora a 0, tipo esto:
dd/mm/yyyy 00:00:00.000.
Esto os puede ocurrir, por ejemplo, cuando tenéis alguna aplicación en la que insertas registros el día X con un Now() en el campo DateTime. Como el Now() también pone la hora exacta (14:21:34.234), en el momento de querer saber qué registros se insertaron el día X, necesitaremos devolver el campo DateTime con la hora a ceros.
Pues bien, aquí teneis una función en T-SQL que devolverá el Datime con hora a ceros:
CREATE FUNCTION [dbo].[fnc_GetDateOnly] ( @pInputDate DATETIME )
RETURNS DATETIME
BEGIN
RETURN convert (datetime, convert (varchar, @pInputDate, 101), 101)
END
Espero que os haya sido útil!
Trabajando con una Base de datos SQL Server 2005, me encontré
con la necesidad de devolver un campo DateTime con la hora a 0, tipo esto:
dd/mm/yyyy 00:00:00.000.
Esto os puede ocurrir, por ejemplo, cuando tenéis alguna aplicación en la que insertas registros el día X con un Now() en el campo DateTime. Como el Now() también pone la hora exacta (14:21:34.234), en el momento de querer saber qué registros se insertaron el día X, necesitaremos devolver el campo DateTime con la hora a ceros.
Pues bien, aquí teneis una función en T-SQL que devolverá el Datime con hora a ceros:
CREATE FUNCTION [dbo].[fnc_GetDateOnly] ( @pInputDate DATETIME )
RETURNS DATETIME
BEGIN
RETURN convert (datetime, convert (varchar, @pInputDate, 101), 101)
END
Espero que os haya sido útil!
Etiquetas:
SQL Server 2005,
T-SQL
miércoles, 8 de abril de 2009
Los AsyncPostBackTrigger y PostBackTrigger de AJAX ASP.Net 2.0
El control UpdatePanel , se utiliza para generar webs AJAX ASP.NET 2.0. La idea es que estos paneles se updatean realizando peticiones asíncronas al servidor y refrescan su contenido sin tener que hacer un PostBack de la página entera, si no únicamente de este "trocito" de web.
Con esto potenciamos el User Friendly de nuestra aplicación web, realizando cambios sin que se dé cuenta el usuario.
Para updatear nuestro UpdatePanel necesitamos que un control de la web desencadene un POSTBACK (submit en HTML) . Este control puede ser un botón, que podrá estar ubicado dentro o fuera del panel. La ubicación dará lugar a los dos tipos de trigger's.
Los botones que están fuera usarán el trigger AsyncPostBackTrigger. Deberemos asignar el evento relacionado (Click, Databinding...) . De este modo, al hacer click sobre el botón, refrescaremos el UpdatePanel:
Cuando el control está dentro, el trigger que utiliza es el PostBackTrigger. A este trigger no le tenemos que asignar un evento, así cuando el control mande un postback, el panel recogerá este POST para refrescar su contenido:
Ya tenemos una acción AJAX en nuestra Web!!
Espero que os haya sido útil. Saludos!!
Con esto potenciamos el User Friendly de nuestra aplicación web, realizando cambios sin que se dé cuenta el usuario.
Para updatear nuestro UpdatePanel necesitamos que un control de la web desencadene un POSTBACK (submit en HTML) . Este control puede ser un botón, que podrá estar ubicado dentro o fuera del panel. La ubicación dará lugar a los dos tipos de trigger's.
Los botones que están fuera usarán el trigger AsyncPostBackTrigger. Deberemos asignar el evento relacionado (Click, Databinding...) . De este modo, al hacer click sobre el botón, refrescaremos el UpdatePanel:
Cuando el control está dentro, el trigger que utiliza es el PostBackTrigger. A este trigger no le tenemos que asignar un evento, así cuando el control mande un postback, el panel recogerá este POST para refrescar su contenido:
Ya tenemos una acción AJAX en nuestra Web!!
Espero que os haya sido útil. Saludos!!
Etiquetas:
ajax,
ajaxcontroltoolkit,
asp.net,
framework 2.0,
updatepanel,
web
martes, 31 de marzo de 2009
Framework 2.0 vs Framework 3.0
¿Existen cambios sustanciales respecto estas dos versiones del framework?
Ésta ha sido mi duda de hoy, al querer utilizar los workflows que ofrece microsoft en el framework 3.0, Windows Workflow Foundation (WWF). Mis aplicaciones están desarrolladas en el framework 2.0, así digo...se mantendrá compatibilidad? en el anterior release, no se mantuvo, el cambio de la 1.1 a la versión 2.0 hizo que muchos desarrolladores rehicieran sus aplicaciones. Pero éste no es el caso del frm 3.0.
Indagando por la red, he encontrado que el framework 3.0, que integra API's de Windows Vista, parte del Common Language Runtime (CLR) del framework 2.0 y añade los siguientes componentes (en su momento se llamaron WinFX):

Fuente de la información: enlace.
Ésta ha sido mi duda de hoy, al querer utilizar los workflows que ofrece microsoft en el framework 3.0, Windows Workflow Foundation (WWF). Mis aplicaciones están desarrolladas en el framework 2.0, así digo...se mantendrá compatibilidad? en el anterior release, no se mantuvo, el cambio de la 1.1 a la versión 2.0 hizo que muchos desarrolladores rehicieran sus aplicaciones. Pero éste no es el caso del frm 3.0.
Indagando por la red, he encontrado que el framework 3.0, que integra API's de Windows Vista, parte del Common Language Runtime (CLR) del framework 2.0 y añade los siguientes componentes (en su momento se llamaron WinFX):
- Windows Presentation Foundation (WPF): una serie de API basadas en XAML, con gran potencial de crear interficies gráficas, animaciones 3D, etc. En ello se basa SilverLight.
- Windows Communication Foundation (WCF): Componente que permite la comunicación entre diversas aplicaciones, parecido a un webservices.
- Windows Workflow Foundation (WWF): Componente de creación de Workflows.
- Windows CardSpace (WCS): Componente de seguridad de identificación de usuario.
Framework 3.0 = Framework 2.0 + WPF + WCF + WWF + WCS

Fuente de la información: enlace.
Etiquetas:
framework 2.0,
framework 3.0
lunes, 30 de marzo de 2009
Beta 2 de Internet Explorer 8
Ya tenemos disponible un versión de prueba del nuevo navegador de microsoft IE8. Os adjunto un video demostrativo con las novedades más importantes, entre ellas, las mejoras de seguridad, principal motivo de esta nueva versión tan temprana.
Allá va!
Allá va!
Etiquetas:
internet explorer 8,
navegadores
viernes, 27 de marzo de 2009
Evitar POSTBACK del control Calendar ASP.Net
Pues si, el otro día quise hacer un control calendario, cargando X datos para cada día utilizando el control Calendar que trae ASP.Net. El problema residia en que si clicas en un dia del control, realiza un PostBack y esto no me interesaba...quería que apareciera un div al clicar en el dia y no me hiciera el PostBack. Googleando, no encontré solución alguna...pero hice un truquillo para resolver mi problema.
Al cargar datos, que lo hago en el evento DayRender del control Calendar, puedo eliminar toda la celda del dia y añadir de nuevo un label con dia de la fecha, es decir:
'Recogemos el literal de la celda del dia
Dim a As System.Web.UI.LiteralControl = day.Cell.Controls.Item(day.Cell.Controls.Count - 1)
'Aqui recoger el valor del dia y lo pasamos a un label
Dim lbl As New Web.UI.WebControls.Label
lbl.Text = a.Text
'Le podemos añadir por javascript que el mouse se convierta en un dedo clicable al pasar por encima del dia
lbl.Attributes("onmouseover") = "this.style.cursor = 'default';"
'Borramos todo el control, asi quitamos el postback que trae el literal, y añadimos el lbl que no tiene postback
day.Cell.Controls.Clear()
day.Cell.Controls.Add(lbl)
Así evitaremos que nos haga postback y podremos añadir todo el javascript que deseemos!!
Saludos a todos y encantado de recibir algun comentario!
Al cargar datos, que lo hago en el evento DayRender del control Calendar, puedo eliminar toda la celda del dia y añadir de nuevo un label con dia de la fecha, es decir:
'Recogemos el literal de la celda del dia
Dim a As System.Web.UI.LiteralControl = day.Cell.Controls.Item(day.Cell.Controls.Count - 1)
'Aqui recoger el valor del dia y lo pasamos a un label
Dim lbl As New Web.UI.WebControls.Label
lbl.Text = a.Text
'Le podemos añadir por javascript que el mouse se convierta en un dedo clicable al pasar por encima del dia
lbl.Attributes("onmouseover") = "this.style.cursor = 'default';"
'Borramos todo el control, asi quitamos el postback que trae el literal, y añadimos el lbl que no tiene postback
day.Cell.Controls.Clear()
day.Cell.Controls.Add(lbl)
Así evitaremos que nos haga postback y podremos añadir todo el javascript que deseemos!!
Saludos a todos y encantado de recibir algun comentario!
Etiquetas:
asp.net,
framework 2.0,
vb.net
Suscribirse a:
Entradas (Atom)