2009-12-19 8 views
7

Tengo un objeto dateTime en C# y quiero hacer una inserción en el campo de fecha y hora de SQL Server. ¿Cuál es el formato correcto para esto?cuál es la forma correcta de formatear una fecha y hora en el campo de fecha y hora del servidor SQL

+4

Probablemente no debería ser la construcción de hasta cadenas SQL en el código. En su lugar, debe considerar usar procesos almacenados, consultas parametrizadas o un ORM. Cualquiera de estos resolverá su problema con el formato, ya que acaba de pasar el objeto, no tiene que hacer ningún formato de cadena. –

Respuesta

16

La forma correcta de hacer esto es mediante el uso de una consulta parametrizada, no formateando el texto. Entonces solo puede usar un parámetro fuertemente tipado SqlDbType.DateTime.

(Si es absolutamente necesario utilizar el formato de texto para hacer esto - y yo recomendaría fuertemente contra ella -. Entonces algo así como yyyyMMdd HH:mm:ss debe hacer el truco)

+0

¿aún no estaré pasando una cadena a la consulta parametrizada y tendré el mismo problema? – leora

+0

En realidad, el formato que está garantizado para funcionar en cualquier servidor SQL, independientemente del idioma y la configuración regional sería 'aaaaMMdd HH: mm: ss' (sin los guiones - esos causaron problemas en ciertas configuraciones de idioma) –

+0

@marc_s: He actualizó la respuesta para usar el formato de seguridad en todas las circunstancias. – LukeH

0

uso SET DATEFORMAT

una muestra took from here

 SET NOCOUNT ON 
    CREATE TABLE X(EXAMPLE INT, D SMALLDATETIME) 
    -- EXAMPLE 1 
    SET DATEFORMAT MDY 
    INSERT INTO X VALUES (1, '10/30/56') 
    -- EXAMPLE 2 
    SET DATEFORMAT YDM 
    INSERT INTO X VALUES (2, '56/31/10') 
    -- EXAMPLE 3 
    SET DATEFORMAT YMD 
    INSERT INTO X VALUES (3, '56/10/31') 
    SELECT * FROM X 
3

Para ampliar la respuesta de @ Luke me encontré con este error el otro día.

El formato yyyy-MM-dd HH:mm:ss tiene un problema local/idioma en SQL Server 2005 (un ejemplo es el francés), pero se fija en SQL 2008:

Por lo tanto, no utilice este formato: yyyy-MM-dd HH:mm:ss (separador de espacio).

Use Only: yyyy-MM-ddTHH:mm:ss (separador de "T") o yyyyMMdd HH:mm:ss (sin delimitadores guión)

importante si se está generando scripts que incluyen datetime constantes.

Ver Jamie Thomson's article on SQL Blog

Cuestiones relacionadas