Fechas y monedas (Formatos - Configuración Regional)

12/09/2006 - 20:03 por Julio Briceño | Informe spam
Fechas y monedas (Formatos - Configuración Regional)

Saludos cordiales,

¿Qué estándar se puede utilizar para que una aplicación funcione
independientemente de la configuración regional del cliente y del servidor,
tanto para las fechas-horas y las monedas? Es decir, ¿existe alguna manera de
trabajar una aplicación cliente/servidor Visual Basic.net, ado.net,
SqlServer, en la que no importe la configuración regional ni del servidor ni
de los clientes, que no importe si es MM/DD/YYYY ó DD/MM/YYYY o si tiene
datos para horas DD/MM/YYYY HH:MM:SS para el caso de las fechas o si el
separador de miles es ‘,’ ó ‘.’?

¿Cómo controlo el formato de las variables tipo ‘date’ y las variables
‘Double’ ó ‘Single’ en .net? ¿Cómo debo enviar los inserts sin son en cadenas
desde la aplicación y cómo debo enviarlos si son por procedimientos
almacenados? ¿Cómo hagos los queries basados en fecha? ¿Cómo los hago basados
en monedas y que funcionen independientemente del formato?

Hasta luego y gracias de antemano,

Julio César Briceño R.
C.I. V-13.952.301
 

Leer las respuestas

#1 Alberto Poblacion
13/09/2006 - 07:56 | Informe spam
"Julio Briceño" wrote in message
news:
Fechas y monedas (Formatos - Configuración Regional)
¿Cómo controlo el formato de las variables tipo 'date' y las variables
'Double' ó 'Single' en .net?



Todas esas variables siempre guardan los datos en binario, y por tanto
NO TIENEN formato. El formato siempre se aplica en el momento en que las
conviertes desde/hacia un String. Por desgracia, el lenguaje VB es muy
"liberal" en cuanto a conversiones, y a veces las realiza de forma implícita
aunque tú no escribas en tu código la orden de conversión. Es muy
recomendable que pongas en tu programa el Option Strict ON para que el
compilador te avise cuando se produce una conversión de este tipo, y que la
conviertas de implícita en explícita. La ventaja de hacer explícitas las
conversiones es que puedes especificar el formato que quieras y no depender
de la configuración regional del equipo.
Por ejemplo:

Dim fecha as DateTime = DateTime.Now
Dim s as String = fecha

La última linea equivale a Dim s as String=fecha.ToString(). Se produce
una conversión implícita de fecha a string, y se aplica la configuración
regional del equipo (dia/mes/año o mess/dia/año).
Si escribes la conversión explícitamente, puedes forzar el formato que
quieras:

Dim s as String=fecha.ToString("dd/MM/aaaa")


¿Cómo debo enviar los inserts sin son en cadenas
desde la aplicación y cómo debo enviarlos si son por procedimientos
almacenados? ¿Cómo hagos los queries basados en fecha? ¿Cómo los hago
basados
en monedas y que funcionen independientemente del formato?



Lo mejor es que parametrices tus sentencias. De esa forma, siempre
asignas las fechas y números en formato binario al parámetro, y son los
drivers de la base de datos los que pasan el binario al formato adecuado
según lo requiera la base de datos.

Ejemplo:

Dim cmd as New SqlCommand("INSERT INTO TABLA(Fecha) VALUES (@f)",
conexion)
SqlParameter param = New SqlParameter("@f", SqlDbType.DateTime)
param.Value = DateTime.Now 'Fecha asignada en binario; da igual la
configuración regional
cmd.Parameters.Add(param)
cmd.ExecuteNonQuery()

Esta técnica vale tanto para los valores pasados en un insert o update
como para los que pones en un "where". También se usa para los parámetros de
los procedimientos almacenados.
Y, por cierto, también es conveniente usarla con los parámetros de tipo
string. De esa forma funciona el paso de cadenas del tipo "O'Donell", que de
lo contrario fallarían debido a la comilla, y también te evitas la
posibilidad de que se produzcan ataques de inyección de SQL.

Preguntas similares