DateTime
C#中的A是值类型,而不是引用类型,因此不能为null。但是,它可以DateTime.MinValue
是超出SQL ServerDATETIME
数据类型范围的常数。
值类型保证始终具有(默认)值(零),而无需始终进行显式设置(在这种情况下为DateTime.MinValue)。
结论是您可能有一个未设置的DateTime值,您正试图将其传递给数据库。
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
关于Sql Server
datetime
1753年1月1日至9999年12月31日之间的日期和时间数据,精度为三分之一秒(相当于3.33毫秒或0.00333秒)。值四舍五入为.000,.003或.007秒
smalldatetime
1900年1月1日到2079年6月6日之间的日期和时间数据,精确到分钟。小于等于29.998秒的smalldatetime值将四舍五入到最接近的分钟;29.999秒或更高的值将四舍五入到最接近的分钟。
MSDN:SQL Server DateTime和SmallDateTime
最后,如果发现自己将C#DateTime
作为字符串传递给sql,则需要按以下格式设置其格式,以保持最大精度并防止sql server抛出类似错误。
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
更新(8年后)
考虑使用日期范围和时间范围DateTime2
与.net更好地对齐的sql数据类型DateTime
0001-01-01 through 9999-12-31
00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2(Transact-SQL)