En DateTime
i C# är en värdetyp, inte en referenstyp, och kan därför inte vara null. Det kan dock vara konstanten DateTime.MinValue
som ligger utanför intervallet för SQL-servrar DATETIME
data typ.
Värdetyper har garanterat alltid ett (standard)värde (noll) utan att alltid behöva anges uttryckligen (i det här fallet DateTime.MinValue).
Slutsats är att du förmodligen har ett oinställt DateTime-värde som du försöker skicka till databasen.
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
Angående SQL Server
MSDN:Sql Server DateTime och SmallDateTime
Slutligen, om du kommer på dig själv att skicka en C# DateTime
som en sträng till sql, måste du formatera den enligt följande för att bibehålla maximal precision och för att förhindra att sql-servern ger ett liknande fel.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Uppdatering (8 år senare)
Överväg att använda sql DateTime2
datatyp som passar bättre med .net DateTime
med datumintervall 0001-01-01 through 9999-12-31
och tidsintervall 00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");