viernes, 30 de octubre de 2009
SQL SERVER
IS NULL, IS NOT NULL, <>,=.
Realizando algunas pruebas con una consulta, la cual me arrojaba datos, que ya no deberían mostrarse en el GRID, me puse a verificar las tablas directo en el Gestor de BD’s e hice unas consultas sobre una de las tablas involucradas de la siguiente forma para verificar que el campo no es nulo:
SELECT CVE_T_DOCTO FROM [SIMAN].[SIMAN].[DOCUMENTO]
WHERE CVE_T_DOCTO <> NULL AND num_publicacion like '%MSS-%'
Y sorpresa, no me marcó ningún error, pero no mostró la información.
Asi es que mejor lo hice de esta forma:
SELECT CVE_T_DOCTO FROM [SIMAN].[SIMAN].[DOCUMENTO]
where NOT(cve_t_docto IS NULL) AND num_publicacion like '%MSS-%'
Ó
Tambien lo pueden realizar así:
SELECT CVE_T_DOCTO
FROM [SIMAN].[SIMAN].[DOCUMENTO]
where cve_t_docto IS NOT NULL and num_publicacion like '%MSS-%'
Explicación:
El null es que se desconoce el valor, siginifica que el campo no tiene valor
y la cadena vacia (‘’)es que se conoce y es vacio.
Indica que hay una cadena vacía, pero cadena al fin. O sea, existe algo: una cadena.De esto se deriva que no puedas usar condiciones (where) preguntando si "campo = null", sino que existe la sentencia especial "campo is null".
NULL ni siquiera ocupa espacio, es como una variable declarada pero no utilizada.
La diferencia entre un campo vacío y uno nulo es la “virginidad” del campo. Un campo nulo está “vírgen”. Una vez que se carga un valor (cualquier valor) deja de ser nulo. Luego, por más que quieras vaciarlo no volverá a ser virgen (nulo).
Es este caso yo estoy utilizando SQL SERVER 2005.
No olviden dejar sus comentarios.
jueves, 29 de octubre de 2009
Variables de Session con Asp.Net
Las variables de sesión son algunos de los métodos más utilizados frecuentemente para intercambiar información entre las páginas. Sin embargo existen algunos inconvenientes para utilizar las variables de sesión por ejemplo:
Las variables de Session se acceden por sus nombres de cadena:
Session(“Clave”).
Dado que los nombres mal escritos no se detectan en tiempo de compilación, esto puede llevar a errores de tiempo de ejecución que muchas veces son difíciles de depurar.
El valor de una variable de Session no es fuertemente tipado (strongly type). Un valor de cualquier tipo puede ser almacenado dentro de una variable de Session, pero el compilador no verifica el tipo.
Una vez que una variable se recupera de una sesión, se le debe hacer un "Cast" o "Casting", para que dicha variable sea util.
En los lenguajes fuertemente tipados, el compilador no permite que se utilice una variable como parametro de un procedimiento, si sus tipos no coinciden exactamente.
En el siguiente ejemplo voy a mostrar como manejar variables de sesión fuertemente tipadas.
Solución
La idea básicamente es encapsular las variables de Session en propiedades estaticas de una clase.
Implementaciòn de la clase:
SessionActual, es un atajo para de HttpContext.Current.Session; tambien nos ayuda a controlar en caso de que la Session no este disponible.
La clase la pueden crear dentro de la Carpeta “App_Code”.
Imports System.Web.SessionState.HttpSessionSate
Imports System.Web.SessionState
Imports System.Web.UI.Page
Public Class clsSession
Private Shared userCve As String = "cve_usuario"
Private Shared userRol As String = "cve_Rol"
Private Shared ReadOnly Property SessionActual() As HttpSessionState
Get
If HttpContext.Current.Session Is Nothing Then
SessionActual.Abandon()
Throw new Exception("Error,ha caducado su sesión, debe iniciar sesión nuevamente.")
Else
Return HttpContext.Current.Session
End If
End Get
End Property
Public Shared Property cveUsuario() As String
Get
Return TryCast(currentSession(userCve), String)
End Get
Set
If value <> Nothing Then
SessionActual(userCve) = value
Else
SessionActual.Remove(userCve)
End If
End Set
End Property
Public Shared Property Rol() As String
Get
Return TryCast(SessionActual(userRol), String)
End Get
Set
If value <> Nothing Then
SessionActual(userRol) = value
Else
SessionActual.Remove(userRol)
End If
End Set
End Property
End Class
Siguiendo con el mismo tema, se van a topar que al utilizar variables de session, al caducar dicha session se pierden los valores, así es que deben validar el estado de la session, si ocupan “variables de session”, para pasar como parámetros a sus consultas de lo contrario al mandar dato nulo en su consulta les marcará error.
Nota:
TryCast, Está disponible en Visual Basic 2005 y posterior, se usa solo con tipos por referencia, y se usa normalmente comprobando si el valor que devuelve no es nulo (Nothing).
En todas las conversiones, excepto con TryCast, si la conversión no se puede hacer, se produce una excepción del tipo InvalidCastException, con TryCast, si no se puede hacer la conversión "simplemente" se devuelve un valor nulo.
Espero me dejen sus comentarios, debido a cuestiones de trabajo había dejado abandonado un poco el blog, pero procurare escribir más seguido.
martes, 1 de septiembre de 2009
Envío de correos a través de Gmail, con varios archivos adjuntos y AJAX
En este articulo te explico como envíar un correo electrónico con varios archivos adjuntos a multiples usuarios previamente registrados en una Base de Datos desde una página de ASP.NET, usando las clases de System.Net.Mail que son nuevas en la versión 2.0 de .NET Framework, GMAIL y AJAX.
Aclaro yo estoy usando la versión 3.5 del .Net Framework
El codigo puede ser extesible a cualquier servidor de correo con soporte SMTP, haciendo uso de System.Net.Mail del .Net framework 2.0, en este caso yo estoy usando GMAIL, a traves del puerto 587, en lugar del 25 y realizar un envío usando la clase System.Net.Mail.MailMessage del espacio de nombres System.Net.Mail :
En su propiedad From : El que envía el mensaje.
En su propiedad To : A quien va dirigido el mensaje.
En su propiedad Subject: El asunto del mensaje.
En su propiedad Body : El contenido del mensaje.
En su propiedad Priority : La prioridad del mensaje .
En su propiedad IsBodyHtml : Obtiene o establece un valor que indica si el cuerpo del mensaje de correo etá en HTML.
Nota: esta propiedad es nueva en la versión 2.0 de .NET Framework.
Para enviar el mensaje usaremos un objeto del tipo SmtpClient, del cual debemos crear una nueva instancia de esa clase y asignar los nuevos valores apropiados para poder enviar el mensaje.
Vamos a empezar, se supone que tienes un formulario web, con controles de tipo Textbox, para cada una de las propiedades mencionadas arriba, los destinatarios yo los tengo registrados en una BD’s, por lo cual no tengo un TextBox para capturar el destinatario, de igual forma yo agregué un control RadioButtonList, el cual lo renombre como rblistParameter. Este control sirve para presentar al usuario un conjunto de opciones mutuamente excluyentes entre si, es decir, si el usuario selecciona un componente radio todos los demás componentes radioButton en la forma se desmarcan o deseleccionan solos, es por esta razón que decimos que radiobutton son mutuamente excluyentes.
El FileUploadAJAX es un control open source para ASP.NET 2.0 de un modo de uso muy similar al tradicional FileUpload pero con una diferencia clave: ¡comportamiento AJAX! ¿Y eso que significa? Pues que con el FileUploadAJAX se podrá subir ficheros de manera asíncrona y sin recargar la página. Si desean descargar el control FileUploadAJAX, lo pueden hacer del siguiente link: http://fileuploadajax.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=8061
Para usar el FileUploadAjax tienen que hacer lo siguiente:
Arrastrar el control a la pagina, el encabezado de la página quedará así:
<%@ Register Assembly="FUA" Namespace="Subgurim.Controles" TagPrefix="cc1" %>
En el .aspx te quedará de la siguiente manera:
Para usar la librería primero deberás importar la librería:


Consideraciones....
No olvidemos incluir estos namespace: using System.Net; using System.Net.Mail, Subgurim.Controles, using System.Collections, using System.Collections.Generic, using System.Net.Mime,using System.IO.
Para los servidores que no requieran usar una comunicación por SSL comentar la línea de smtp.EnableSsl.
En el ejemplo se asigna un destinatario a la propiedad To, esta propiedad es una colección del tipo MailAddressCollection, por eso usa el método Add, podemos agregar la cantidad de destinatarios que necesitemos usando ese método.
Al momento de usar el método Send lo ponemos en un Try-Catch porque se puede producir errores en el envió, por ejemplo por requerir SSL.
Si te sirvió, déjame un comentario.
Asp.Net
C#
AJAX
Espero que les sea de utilidad.
