¿Cómo evitar el error de valor de fecha y hora fuera de rango?

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.