Un DateTime
in C# è un tipo di valore, non un tipo di riferimento e pertanto non può essere null. Può tuttavia essere la costante DateTime.MinValue
che è al di fuori dell'intervallo di SQL Server DATETIME
tipo di dati.
È garantito che i tipi di valore abbiano sempre un valore (predefinito) (di zero) senza che sia sempre necessario impostarli in modo esplicito (in questo caso DateTime.MinValue).
La conclusione è che probabilmente hai un valore DateTime non impostato che stai cercando di passare al database.
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999,
exactly one 100-nanosecond tick
before 00:00:00, January 1, 10000
MSDN:DateTime.MinValue
Per quanto riguarda SQL Server
MSDN:Sql Server DateTime e SmallDateTime
Infine, se ti ritrovi a passare un C# DateTime
come stringa in sql, è necessario formattarla come segue per mantenere la massima precisione e per evitare che il server sql generi un errore simile.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Aggiornamento (8 anni dopo)
Prendi in considerazione l'utilizzo di sql DateTime2
tipo di dati che si allinea meglio con .net DateTime
con intervallo di date da 0001-01-01 through 9999-12-31
e intervallo di tempo 00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");