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
risposta
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)
non passarei ancora una stringa nella query parametrizzata e avrò lo stesso problema? – leora
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) –
@marc_s: Ho aggiornato la risposta per utilizzare il formato sicuro in tutte le circostanze. – LukeH
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
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.
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. –