Equivalencias entre tipos de datos de SQL Server y el .NET Framework

Es importante establecer los tipos de datos correctos en las variables de ASP.NET que utilizas para realizar operaciones con datos que provienen de una base de datos de SQL Server. Pero ¿qué tipos de datos cuando estás programando en ASP.NET corresponden a cada tipo de datos definido en SQL Server?

Aquí esta la lista de equivalencias:

SQL Server data type

CLR data type (.NET Framework)

varbinary

Byte[]

binary

Byte[]

varbinary(1), binary(1)

byte, Byte[]

image

None

varchar

None

char

None

nvarchar(1), nchar(1)

Char, String, Char[]

nvarchar

String, Char[]

nchar

String, Char[]

text

None

ntext

None

uniqueidentifier

Guid

rowversion

Byte[]

bit

Boolean

tinyint

Byte

smallint

Int16

int

Int32

bigint

Int64

smallmoney

Decimal

money

Decimal

numeric

Decimal

decimal

Decimal

real

Single

float

Double

smalldatetime

DateTime

datetime

DateTime

sql_variant

Object

User-defined type(UDT)

Same class that is bound to the user-defined type in the same assembly or a dependent assembly.

table

None

cursor

None

timestamp

None

xml

None

Encontrarás la lista completa en esta página.

Cómo evitar que la variable Session.SessionID cambie

Si creas una página en ASP.NET y en su evento Load pones lo siguiente:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   Label1.Text = Session.SessionID & " " & Session("idsesion")
   Response.Write(Session.SessionID)
End Sub

notarás que cada vez que oprimes Refresh o Actualizar en tu navegador, la variable de sesión se modifica. Definitivamente es raro porque uno siempre ha sabido que la variable de sesión debe ser la misma durante todo el tiempo que el visitante permanece visitando la aplicación.

Bueno, la variable de sesión permanece igual siempre y cuando se coloque algún valor en el estado de la sesión. (yo tampoco entiendo muy bien la razón).

El caso es que para solucionar el problema “de raíz”, creé una variable de sesión en el código del archivo Global.asax, justo cuando se crea la sesión (checa la línea 20):

<%@ Application Language="VB">
 
<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
   ' Code that runs on application startup
End Sub

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
   ' Code that runs on application shutdown
End Sub

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
   ' Code that runs when an unhandled error occurs
End Sub

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
   ' Code that runs when a new session is started
   'La siguiente linea evita que session.sessionid se modifique cada
   'vez que se oprime Refresh en el navegador
   Session("idsesion") = Session.SessionID
End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
   ' Code that runs when a session ends.
   ' Note: The Session_End event is raised only when the sessionstate mode
   ' is set to InProc in the Web.config file. If session mode is set to StateServer
   ' or SQLServer, the event is not raised.
End Sub
</script>

Esto hace que el estado de la sesión permanezca sin modificarse y ahora el código del Response.Write(Session.SessionID) citado anteriormente regresa siempre el mismo valor. =)

Iconos de espera para Ajax

¿Estás buscando tu propio icono (indicador) de espera para Ajax?

Esta página es muy buena, te permite crear el tuyo personalizado con los colores que desees, tiene una amplia variedad y los diseños están atractivos. La salida es un gif animado que puedes descargar.

http://www.ajaxload.info/

Deshacerse del archivo thumbs.db

Windows XP genera un archivo oculto llamado thumbs.db en cada carpeta. Este archivo guarda las vistas previas (thumbnails) de las fotografías que hay en esa carpeta. Esto sirve para acelerar la visualización de vistas previas la próxima vez que entras a esa carpeta.

En ocasiones este archivo nos estorba, por ejemplo cuando vas a hacer un archivo zip o subir una carpeta completa por FTP, el archivo thumbs.db es incluído, ocupando espacio y tiempo innecesario.

He llegado a notar que en una carpeta que tiene 1MB ocupado en varias imágenes, el archivo thumbs.db ocupa otro MB.

Para deshacerte de este archivo, entra al Panel de Control y haz clic en Opciones de Carpeta.

Panel de control

A continuación marca la casilla que dice No alojar en caché las vistas en miniatura.

Thumbs.db

Esto hará que ya no aparezca el archivo thumbs.db y si ya existe en alguna carpeta y lo borras, no regresará. La única desventaja será que cuando entres nuevamente a una carpeta con imágenes, el proceso de creación de vistas previas será un poco más lento porque ya no habrá caché. Esto no debe ser un problema si tienes una cantidad moderada de imágenes en cada carpeta.

Bloqueo del puerto 25 por Prodigy Infinitum

Prodigy Infinitum es el proveedor más grande de Internet en México. Recientemente tomaron la determinación de bloquear el puerto 25 para combatir el SPAM o correo basura.

Para los proveedores de hosting esto es un problema, porque los clientes utilizan principalmente Infinitum y perdieron la capacidad de enviar mensajes desde sus oficinas usando Outlook o Thunderbird. Sí los pueden descargar porque el puerto de POP que es el 110 no fue bloqueado.

¿Cómo solucionarlo?

Si eres un proveedor de hosting, esta es la mejor solución:

Antes que nada, no cambies tu servidor de e-mail a un puerto diferente. Déjalo en el puerto 25 porque todos los servidores de mail externos (hotmail, gmail, yahoo, etc) intentarán conectarse con tu servidor de mail usando el puerto 25. Si pones a tu servidor de mail a escuchar en otro puerto, los correos de servidores externos no lo encontrarán y tus clientes no recibirán mails.

Ok, con ese asunto aclarado, tienes que hacer lo siguiente:

Al seleccionar un nuevo puerto, no puedes elegir el que se te venga a la mente, busca en Internet información sobre los diferentes puertos porque hay varios números que ya están reservados para otros servicios, como FTP, bases de datos, etc. El 26 está libre y lo puedes usar sin problemas.

1. Redirigir el tráfico del puerto 26 al 25

Si tu servidor de mail lo soporta, indícale que escuche en el puerto 25 y en el 26 (u otro número de tu elección) y sáltate toda la explicación siguiente del paso 1. Si no soporta múltiples puertos, entonces deberás redirigir todo el tráfico del puerto externo 26 (u otro número de tu elección) al puerto interno 25.

Esto también se puede llamar “port mapping”. Estas son dos herramientas que me recomendaron para hacerlo, aunque no las he probado:

  1. Greyware Detour – http://www.greyware.com/software/detour/index.asp
  2. Port mapper, v1.40 – http://www.kmint21.com/free/port-map.zip

Una tercera opción y que sí he probado, es utilizar el Windows Firewall/Internet Connection Sharing (ICS). Para hacerlo, primero asegúrate que el servicio esté encendido y marcado como automático.

Firewall de Windows

Puedes abrir el Firewall de Windows desde el panel de control:

Panel de Control

Si no está encendido, enciéndelo:

Enciende el Firewall

Haz clic en la pestaña Advanced, selecciona Public bajo Network Connection Settings y oprime el botón Settings....

Pestaña Advanced

En la ventana que aparece, oprime Add... para dar de alta una nueva entrada y realizar la redirección o mapeo de puertos. Notarás que yo ya lo he hecho, mi entrada se llama Programa de mail.

Dar de alta la entrada de la redirección

Esta es la configuración de dicha entrada, he puesto una dirección IP ficticia, modifícala por tu IP pública:

Configuración de redirección

Acepta los cambios y la redirección ha sido realizada. Ahora, todo el tráfico que llegue a tu servidor solicitando el puerto 26 será reenviado al puerto 25. De esta manera es como si tu servidor de mail estuviera escuchando por ambos puertos.

Solamente ten en cuenta que si no tenías habilitado tu Firewall y lo acabas de habilitar, tienes que abrir los puertos para los demás servicios, como FTP, Web, etc. Esto lo haces desde la misma ventana, pero en la pestaña Exceptions. Haz clic en Add Port... y configura el puerto que deseas abrir:

Abrir otros puertos

Busca una lista de puertos en Internet para saber cuáles debes abrir.

Lo que me gusta de esta solución es que no hay que instalar nada adicional en el servidor, y el Firewall de Windows corre como un servicio, así que te aseguras de que siempre estará activo, aún después de reiniciar el servidor.

2. Pedir a tus clientes que modifiquen la configuración de su Outlook o Thunderbird

Suponiendo que seleccionaste el puerto 26, tendrás que pedirles a tus clientes que realicen la modificación del Servidor de Salida (SMTP) en sus clientes de e-mail (Outlook, Thunderbird, Eudora, etc), borrando el número 25 y colocando el 26.

SMTP

Los pasos para realizar esta configuración varían de programa a programa, busca información en Internet para saber cómo hacer este cambio.

Al usar el puerto 26, el Outlook de tus clientes se conectará a tu servidor por el puerto 26, tu servidor lo redireccionará al puerto 25, donde está escuchando tu servidor de mail. Tu cliente nunca utilizó el puerto 25, que ha sido bloqueado.

Si tienes otros clientes cuyo proveedor de Internet no ha bloqueado el puerto 25, entonces puedes pedirles que realicen el cambio al puerto 26 o que no hagan nada. De cualquiera de las dos formas podrán enviar y recibir correo sin problemas.