Estoy pasando una statement de inserción ad-hoc de la aplicación c # al servidor SQL 2000/2005. A veces, si el formato datetime de la máquina (donde está instalado el servidor SQL) es diferente de lo que estoy transmitiendo, se está generando un error.
por ejemplo: en la instrucción Insertar, estoy pasando ‘2010-03-10 00: 00: 00-05: 00’, pero la configuración de la fecha regional de la máquina es diferente. Estoy recibiendo este error: –
La conversión de un tipo de datos char a un tipo de datos datetime resultó en un valor de fecha y hora fuera de rango.
¿Puedo pasar algún formato de fecha genérico en Insertar statement de c # que funciona perfectamente con cualquier configuración regional de fecha y hora de la máquina?
“yyyymmdd” es el más seguro, el formato básico ISO-8601. “aaaa-mm-dd” tiene problemas, como se menciona en el siguiente enlace
Con los tiempos: “aaaammdd hh: mm: ss”
SQL Server puede ser un poco extraño cuando se trata de tiempos de datos. Se soluciona principalmente en SQL Server 2008 con los nuevos formatos de fecha y hora. El artículo definitivo de Tibor Karaszi.
Edición: Y otro artículo de Tony Rogerson para los incrédulos.
En lugar de crear su statement de inserción SQL dinámicamente como cadenas, si utiliza procedimientos almacenados o consultas parametrizadas, podrá pasar el valor de datetime de C # como un objeto de fecha y hora y no habrá discrepancia de formato para causar problemas.
[Corrección: esto solo funciona en SQL 2008, vea la respuesta de gbn para una cadena válida 2000/2005]
De forma alternativa, creo que, independientemente de la configuración regional de los servidores SQL, si pasa la fecha como una cadena ISO 8601 completa, se manejará correctamente.
P.ej
2010-03-10T14:17Z
Personalmente, recomendaría consultas parametrizadas o procedimientos almacenados, ya que también solucionan muchos otros problemas.