Estoy tratando de guardar el formato de fecha y hora actual de C # y convertirlo a un formato de fecha de SQL Server yyyy-MM-dd HH:mm:ss
para poder usarlo para mi UPDATE
consulta.
Este fue mi primer código:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
La salida en la fecha está bien, pero la hora siempre es "12:00:00", así que cambié mi código a lo siguiente:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Me dio este error de compilación:
FormatException no se controló
Y sugirió que necesito analizar. Así que intenté hacer esto en mi código según mi investigación aquí en StackOverflow:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
o
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
Pero me está diciendo que es un método que no es válido para un contexto dado. Intenté buscar soluciones a mi problema y ya llevo dos horas estancado. Todavía soy un poco nuevo en C #, ¿pueden ayudarme por favor?
DateTime
o lo está almacenando como una cadena? TambiénToString
enDate
implicaría que el tiempo es siempre12:00:00
DATETIME
y luego podría evitar hacer toda esta conversión hacia y desde una representación de cadena.datetime
si fuera un buen comienzo. Aún mejor, ¿por qué le pasa al servidor la hora actual ? Tiene unaGETDATE()
función que se puede llamar por completo en el lado del servidor.Respuestas:
prueba esto a continuación
fuente
yyyy-MM-dd
de la hora del día y el nombre "ISO8601" para el formulario donde está el carácter separador aT
. Pero sí, ambas formas se convierten implícitamente (y correctamente) adatetime
.El uso del formato estándar de fecha y hora "s" también garantizará la compatibilidad de internacionalización (MM / dd versus dd / MM):
Opciones completas: (código: resultado de muestra)
Compatible con .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Referencia:
DateTime.ToString
Métodofuente
La respuesta correcta ya fue dada "parámetros de uso". Dar formato a una fecha y pasarla como una cadena a SQL-Server puede dar lugar a errores, ya que depende de la configuración de cómo se interpreta la fecha en el lado del servidor. En Europa, escribimos '1.12.2012' para indicar el 1 de diciembre de 2012, mientras que en otros países esto podría tratarse como el 12 de enero.
Al emitir declaraciones directamente en SSMS, uso el formato
yyyymmdd
que parece ser bastante general. No encontré ningún problema en las diversas instalaciones en las que trabajé hasta ahora.Hay otro formato que se usa con poca frecuencia, que es un poco extraño pero funciona para todas las versiones:
volverá el primero de octubre de 2013.
Regresará el 1 de octubre, 1:45:01 PM
Recomiendo encarecidamente usar parámetros y nunca formatear su propio código SQL pegando fragmentos de declaración formateados de cosecha propia. Es una entrada para inyección SQL y errores extraños (formatear un valor flotante es otro problema potencial)
fuente
Tu primer código funcionará haciendo esto
fuente
Su problema está en la propiedad "Fecha" que se trunca
DateTime
solo hasta la fecha. Podrías poner la conversión así:fuente
La respuesta que estaba buscando era:
También aprendí que puedes hacerlo de esta manera:
donde myCountryDateFormat se puede cambiar para cumplir con el cambio según los requisitos.
Tenga en cuenta que la etiqueta "Esta pregunta puede que ya tenga una respuesta aquí:" en realidad no ha respondido a la pregunta porque, como puede ver, utilizó un ".Date" en lugar de omitirlo. Es bastante confuso para los nuevos programadores de .NET
fuente
si desea almacenar la fecha actual en la tabla para que pueda usar
o pasar esta función como parámetro
p.ej. 'actualizar tblname set curdate = GETDATE () donde colname = 123'
fuente
¿Por qué no omitir la cadena por completo?
fuente
Tu problema está en la
Date
propiedad que se truncaDateTime
solo hasta la fecha. Podrías poner la conversión así:fuente
Otra solución para pasar DateTime de C # a SQL Server, independientemente de la configuración de idioma de SQL Server
supuestamente que su configuración regional muestra la fecha como dd.MM.yyyy (estándar alemán '104') luego
pasa la variable de fecha y hora de C # a la variable de tipo de fecha de SQL Server, considerando la asignación según las reglas "104". La fecha del servidor SQL es aaaa-MM-dd
Si su configuración regional muestra la fecha y hora de manera diferente, use la coincidencia adecuada de la tabla CONVERT de SQL Server
ver más sobre Reglas: https://www.techonthenet.com/sql_server/functions/convert.php
fuente
Creo que el problema era que faltaban las dos comillas simples.
Este es el sql que ejecuto en MSSMS:
Como puede ver, hay dos comillas simples, por lo que sus códigos deben ser:
Utilice comillas simples para cada cadena en MSSQL o incluso en MySQL. Espero que esto ayude.
fuente
Usemos la clase SqlDateTime incorporada
Pero aún es necesario verificar los valores nulos. Esto arrojará una excepción de desbordamiento
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
fuente
solo pones "T" + DateTime.Now.ToLongTimeString () + '2015-02-23'
fuente
Si desea actualizar una tabla con ese dateTime, puede usar su cadena sql como este ejemplo:
fuente
"
.fuente