Problema con fechas. SQL Server 2000 to SQL Server 2005

05/03/2007 - 13:22 por gabriel.jaume | Informe spam
Hola a tod@s,

Estoy migrando una base de datos de sql server 2000 a 2005, y me he
encontrado un gran problema con el tema de las fechas.

En la base de datos todas las fechas están en campos "datetime" en el
formato español "dd/mm/yyyy hh:mm:ss", y parece ser que SQL Server
2005 trabaja con fechas en formato americano "mm/dd/yyyy hh:mm:ss".

Los procedimientos almacenado que tienen parámetros del tipo
"datetime" ahora fallan dando el error:
"Error converting data type nvarchar to datetime." Cuando le paso una
fecha que pasa del día 12...

Por otro lado, a la hora de insertar registros ahora los inserta en
formato americano... Y al mostrarlos por pantalla se muestra en
formato español tomando el mes por el dia y viceversa.

Alguien sabe como puedo solucionar este problema?

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
05/03/2007 - 16:18 | Informe spam
Gabi,

El sp para cambiar el lenguaje por defecto para un login especifico es
[sp_defaultlanguage].

Ejemplo:

USE [master]
GO
EXEC master.dbo.sp_defaultlanguage @loginame = N'alejandro', @language =
N'Spanish'
GO.

Este tema no es muy claro que digamos. Cuando ejecutamos el sp desde QA,
SSMS, o llamada directa desde una aplicacion usando "execute dbo.p1 ...",
podemos pasarle el valor del parametro usando los formatos 112 y/o 126 (ver
funcion CONVERT en los BOL) y todo queda en casa. Pero cuando intentamos usar
ADO o ADO.NET, y queremos implementar un objeto tipo "command" o
"sqlcommand", los parametros los definimos casi siempre como "datetime", sin
embargo nuestro sistema operativo (el lado del cliente) puede estar usando un
seteo especifico de alguna region o lenguaje, asi que cuando asignamos, por
ejemplo, Datetime.Now.toString(), este valor tendra el formato de acuerdo al
seteo del SO y si SQL Server usa un seteo diferente entonces la asignacion
falla en el lado del servidor. Si intentamos formatear el valor de
Datetime.Now.toString() para usar formato ANSI y asignamos el valor a un
parametro datetime, esta asignacion falla en el lado del cliente. Que hacemos
entonces?. Una forma seria declarando los parametros "datetime" como
"varchar" en ADO/ADO.NET y por tanto pueden aceptar la cadena "yyyymmdd", al
pasarle ese valor al sp en el servidor, SQL Server hace una traduccion de
estas constantes a valor datetime. Que problema podemos tener?. Un problema
seria que la aplicacion cliente debe asegirar que las constantes de fecha en
formato de cadena, sean en realidad valores de fecha, de lo contrario el sp
fallara en lado del servidor al tratar de convertor la constante de cadena a
valor fecha.

Voy a poner un ejemplo. En la db "northwind", tenemos un sp llamado
"dbo.[Sales by Year]", que espera dos parametros tipo "datetime". En el
codigo vb.net, declaro los parametros tipo "varchar" para poder pasar los
valores con formato ANSI. Si cambio el tipo de parametro a "datetime", al
tratar de ejecutar sqlcmd.executereader() recivo un error porque mi SO
(windows xp pro) esta usando seteo para ingles y al tratar de asignar
'19980101', lo interpreta como mm/dd/yyyy y no hay 19 meses. Fijense que el
error aqui ocurre en el codigo .net y no en el servidor.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim myConnection As New SqlConnection
Dim sqlCmd As New SqlCommand
Dim dr As SqlDataReader

myConnection.ConnectionString = "Persist Security
Info=False;Integrated Security=SSPI;database=northwind;server=(Local);Connect
Timeout0"

sqlCmd.CommandText = "dbo.[Sales by Year]"
sqlCmd.CommandType = CommandType.StoredProcedure

sqlCmd.Parameters.Add("@Beginning_Date", SqlDbType.VarChar, 8).Value
= "19980101"
sqlCmd.Parameters.Add("@Ending_Date", SqlDbType.VarChar, 8).Value =
"19981231"

sqlCmd.Connection = myConnection

myConnection.Open()

dr = sqlCmd.ExecuteReader()
dr.Read()

Console.WriteLine(String.Format("{0}, {1}", dr(0), dr(1)))

dr.Close()
myConnection.Close()
sqlCmd = Nothing
myConnection = Nothing
dr = Nothing

End Sub


AMB

"Gabi" wrote:

Mostrar la cita
#7 Fernando Espana
06/03/2007 - 06:32 | Informe spam
Solucion no ortodoxa pero drastica si no tienes acceso a modificar la forma
de almacenar datos

set language to spanish

al inicio de tus sp y no tendras problemas


"Alejandro Mesa" escribió en el
mensaje de noticias
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida