2009-03-17 8 views
26

Ive ha ottenuto questo in uno statment INSERT per MSSQL 2008Che cos'è datetime2?

System.Data.SqlClient.SqlException: La conversione di un dato datetime2 tipo a un tipo di dati datetime ha provocato in un out-of valore di intervallo.

+5

Il problema si è verificato quando un Entity Framework utilizzato per inserire uno System.DateTime nel mio SQL2008 DB. Ho cambiato il datatype in DB in datetime2 e ora tutto gira liscio. – Glenn

+5

Il problema ha avuto inizio con un errore logico e il DateTime non è mai stato inizializzato, cioè ho provato a inserire 0001-01-01 00: 00: 00.0000000 – Glenn

+4

Questo mi ha preso quando non ho inizializzato un DateTime in EF4 perché I aveva un valore predefinito di GetDate() nel database. – Will

risposta

16

Definisce una data che si combina con un momento della giornata che si basa su 24 ore. datetime2 può essere considerato come un'estensione del tipo datetime esistente con un intervallo di date più ampio, una precisione frazionaria predefinita più ampia e una precisione facoltativa specificata dall'utente.

http://technet.microsoft.com/en-us/library/bb677335.aspx

2

Da technet:

Definisce una data che si combina con un momento della giornata che si basa su 24 ore. datetime2 può essere considerato come un'estensione del tipo datetime esistente con un intervallo di date più ampio, una precisione frazionaria predefinita più ampia e una precisione facoltativa specificata dall'utente.

Ho dovuto verificare perché ho pensato che datetime2 aveva qualche relazione con varchar2. Apparentemente, nessuna relazione.

Inserisci il codice in modo da poter indovinare che cosa ha causato il problema.

20

Il datatype datetime di SQLServer è un intervallo molto più piccolo di valori consentiti rispetto al datatype .net datetime. Il tipo datetime di SQLServer supporta fondamentalmente il calendario gregoriano, quindi il valore più piccolo che puoi avere è 1/1/1753. Nel 2008 SQLServer ha aggiunto un datatype datetime2 che supporta l'anno 1 (non è stato registrato alcun anno 0). Suona come si sta cercando di inserire un valore datetime che è prima di 1753/1/1 in un datetime (non datetime2) colonna SQLServer

+1

Grazie! Informazioni fantastiche! –

+1

Votato per rispondere a ciò che l'utente aveva davvero bisogno di sapere al posto della domanda letterale :) –

+0

+1 ottima risposta, grazie – Dal

1

Potrebbe essere che la vostra tabella di database ha una colonna "DATETIME" o "SMALLDATETIME" e si stai provando ad inserire una data fuori range ?? DATETIME copre dal 1753-1-1 al 9999-12-31, mentre SMALLDATETIME copre solo dal 1900-1-1 al 2079-6-6.

Il nuovo tipo di dati DATETIME2 di SQL Server 2008 coprirà da 0001-1-1 a 9999-12-31.

Marc

0

ho ottenuto questo errore quando la mia colonna di database è stato creato come NOT NULL e io in particolare specificato un Nullable = true sul mio DateTime proprietà nel mio EntityType quadro ADO.Entity.

per risolvere il problema faccio la Nullable proprietà = (None)

Problemi correlati