valor u00f3n tipo texto produjo intervalo fuera fecha datos convertir conversión conversi configurar sql sql-server service sqlexception

sql - u00f3n - la conversión del tipo de datos nvarchar en datetime produjo un valor fuera de intervalo laravel



la conversión de un tipo de datos varchar a un tipo de datos de fecha y hora dio como resultado un valor fuera de rango (6)

Pero si tomo el fragmento de sql y lo ejecuto desde el estudio de administración sql, se ejecutará sin problemas.

Si tiene la libertad de, cambie la cuenta de servicio a su propio nombre de usuario, que heredaría sus periferias de idioma / región.

El quid de la cuestión es:

Uso lo siguiente para convertir -> date.Value.ToString ("MM / dd / aaaa HH: mm: ss")

Comience a usar consultas parametrizadas para que no encuentre estos problemas en el futuro. También es más robusto, predecible y la mejor práctica.

Tengo la siguiente pieza de SQL en línea que ejecuto desde un servicio de Windows C #:

UPDATE table_name SET status_cd = ''2'', sdate = CAST(''03/28/2011 18:03:40'' AS DATETIME), bat_id = ''33acff9b-e2b4-410e-baaf-417656e3c255'', cnt = 1, attempt_date = CAST(''03/28/2011 18:03:40'' AS DATETIME) WHERE id = ''1855''

Cuando ejecuto esto en una base de datos de SQL Server desde la aplicación, aparece el siguiente error:

System.Data.SqlClient.SqlException: la conversión de un tipo de datos varchar a un tipo de datos de fecha y hora dio como resultado un valor fuera de rango. La instrucción se ha terminado.

Pero si tomo el fragmento de SQL y lo ejecuto desde SQL Management Studio, se ejecutará sin problemas.

¿Alguna idea de lo que puede estar causando este problema?


Creo que la mejor manera de trabajar con fechas entre C # y SQL es, por supuesto, utilizar consultas parametrizadas, y siempre trabajar con objetos DateTime en C # y las opciones de formato ToString () que proporciona.

Es mejor que ejecute set datetime <format> ( aquí tiene la explicación de set datetime <format> establecida en MSDN ) antes de trabajar con las fechas en SQL Server para no tener problemas, como por ejemplo set datetime ymd . Solo necesita hacerlo una vez por conexión porque mantiene el formato mientras está abierto, por lo que una buena práctica sería hacerlo justo después de abrir la conexión a la base de datos.
Entonces, siempre puede trabajar con formatos ''aaaa-MM-dd HH: mm: ss: ffff''.

Para pasar el objeto DateTime a su consulta parametrizada, puede usar DateTime.ToString(''yyyy-MM-dd HH:mm:ss:ffff'') .

Para analizar fechas formateadas extrañas en C #, puede usar el método DateTime.ParseExact() , donde tiene la opción de especificar exactamente cuál es el formato de entrada: DateTime.ParseExact(<some date string>, ''dd/MM-yyyy'',CultureInfo.InvariantCulture) . Aquí tiene la explicación de DateTime.ParseExact () en MSDN .


Es un problema de formato de fecha. En Irlanda, el formato de fecha estándar para el 28 de marzo sería "28-03-2011", mientras que "28/03/2011" es el estándar para EE. UU. (Entre muchos otros).


JAVA8: use LocalDateTime.now (). ToString ()


Los formatos de fecha ambiguos se interpretan de acuerdo con el idioma de inicio de sesión. Esto funciona

set dateformat mdy select CAST(''03/28/2011 18:03:40'' AS DATETIME)

Esto no

set dateformat dmy select CAST(''03/28/2011 18:03:40'' AS DATETIME)

Si utiliza consultas parametrizadas con el tipo de datos correcto, evitará estos problemas. También puede usar el formato unambiguous " unambiguous yyyyMMdd hh:mm:ss " yyyyMMdd hh:mm:ss


Sé que esta solución es un poco diferente del caso del OP, pero como se te redirigió aquí al buscar en google el título de esta pregunta, como lo hice, tal vez estés enfrentando el mismo problema que tuve.
A veces obtienes este error porque tu fecha no es válida, es decir, tu fecha (en formato de cadena) apunta a un día que excede el número de días de ese mes. por ejemplo: CONVERT(Datetime, ''2015-06-31'') me causó este error, mientras estaba convirtiendo una declaración de MySql (que no discutía y hace que el error sea realmente difícil de detectar) para SQL Server.