Buscar este blog

viernes, 1 de junio de 2012

VB.NET - Pasar Variables de tipo fecha a Sql Sever

Recientemente tuve un problema de compatibilidad en la referencia cultural del calendario en mi proyecto de Visual Studio .NET 2008, el cual se conecta a una Base de Datos Sql Server 2008 R2.

El problema es al momento de pasar variables de tipo Date hacia un procedimiento almacenado que tiene parámetros de entrada tipo Datetime.


Depurando mi código fuente, descubrí que las fechas se mostraban con formato mm/dd/yyyy y al momento de pasar por la ejecución de mi consulta me daba el siguiente error:
"La conversión de la cadena "" en el tipo 'Date' no es válida."
La solución realmente fue algo simple.
En el archivo de configuracion WebConfig, bajo la linea de:
<system.web>
tenemos que configurar la referencia cultural correcta, para esto (en mi caso), el nombre de la referencia cultural es "es-PE" de Español-Perú
<globalization culture="es-PE" enableClientBasedCulture="true" uiCulture="es-PE" />
Aquí dejo un enlace de las distintas configuraciones de las referencias culturales para cada país.
Listado de Referencias Culturales 
Una vez agregada esta linea en el WebConfig ya podemos pasar las variables tipo fecha con el formato correcto, que en mi caso, tiene que ser dd/mm/yyyy

Dim FechaI As Date = Me.TxtFechaI.Text.Trim
Dim FechaF As Date = Me.TxtFechaF.Text.Trim
dim TextoSql As String = ""
TextoSql = "Stp_Consulta_Operaciones '" & FechaI & "', '" & FechaF & "'"
Otra forma de pasar las variables de tipo Date con una referencia cultural especifica, es usando el DateTime.Parse que también cumple la misma función:

Dim FechaI As Date = DateTime.Parse(Me.TxtFechaI.Text.Trim, Globalization.CultureInfo.CreateSpecificCulture("es-PE").DateTimeFormat)
Dim FechaF As Date = DateTime.Parse(Me.TxtFechaF.Text.Trim, Globalization.CultureInfo.CreateSpecificCulture("es-PE").DateTimeFormat)
dim TextoSql As String = ""
TextoSql = "Stp_Consulta_Operaciones '" & FechaI & "', '" & FechaF & "'"

Y en Sql Server (para ambas formas), los parámetros tipo fecha deben ser datetime
create proc Stp_Consulta_Operaciones
 @fechai datetime,
 @fechaf datetime
as
    begin
     .....
    end
En mi siguiente post, pondré ejemplos de las distintas formas de trabajar con fechas en Sql Server.

No hay comentarios:

Publicar un comentario