2009-12-19 17 views
7

Ho un oggetto datetime in C# e voglio inserire un inserto nel campo datetime di SQL Server. Qual è il formato corretto per questo?qual è il modo corretto di formattare un datetime nel campo datetime del server SQL

+4

Probabilmente non dovrebbe essere la costruzione fino stringhe SQL nel codice. Invece si dovrebbe guardare usando i proc memorizzati, le query parametrizzate o un ORM. Ognuno di questi risolverebbe il tuo problema con la formattazione mentre passi l'oggetto, non devi fare alcuna formattazione di stringhe. –

risposta

16

Il modo corretto per eseguire questa operazione è utilizzando una query con parametri, non formattazione del testo. Quindi puoi semplicemente usare un parametro SqlDbType.DateTime fortemente tipizzato.

(Se è assolutamente necessario utilizzare la formattazione del testo per fare questo - e lo consiglio vivamente contro di essa -. Poi qualcosa come yyyyMMdd HH:mm:ss dovrebbe fare il trucco)

+0

non passarei ancora una stringa nella query parametrizzata e avrò lo stesso problema? – leora

+0

In realtà, il formato che è garantito per funzionare su qualsiasi server SQL indipendentemente dalla lingua e dalle impostazioni internazionali sarebbe 'aaaaMMgg HH: mm: ss' (senza i trattini - quelli hanno causato problemi in determinate impostazioni della lingua) –

+0

@marc_s: Ho aggiornato la risposta per utilizzare il formato sicuro in tutte le circostanze. – LukeH

0

uso SET DATEFORMAT

un campione 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

Per espandere la risposta di @ Luke mi sono imbattuto in questo bug solo l'altro giorno.

Il formato yyyy-MM-dd HH:mm:ss ha un problema locale/lingua su SQL Server 2005 (un esempio è il francese), ma è fissato in SQL 2008:

Quindi, non utilizzare questo formato: yyyy-MM-dd HH:mm:ss (separati da uno spazio).

Use Only: yyyy-MM-ddTHH:mm:ss ("T" separatore) o yyyyMMdd HH:mm:ss (senza delimitatori trattino)

importante se si sta generando gli script che includono datetime costanti.

Vedi Jamie Thomson's article on SQL Blog

Problemi correlati