错误出现:导入数据时出现“sqldatetime 溢出。必须介于 1/1/1753 12:00:00 am 和 12/31/9999 11:59:59 pm之间。”
出现这种问题多半是因为你插入或者更新数据库时datetime字段值为空默认插入0001年01月01日造成datetime类型溢出。
原因分析:
关于datetime,在将datetime类型,插入到数据库的时候,最容易出现的一种错误:“sqldatetime 溢出。必须介于 1/1/1753 12:00:00 am 和 12/31/9999 11:59:59 pm 之间”原因是我们在取datetime.minvalue的值,并插入到数据库的时候,datetime.minvalue值范围和数据库datetime类型数据范围不一致造成的。数据库中,datetime类型字段,最小值1/1/1753 12:00:00,而.net framework中,datetime类型,最小值为1/1/0001 0:00:00,显然,超出了sql的值的最小范围,导致数据溢出的错误。
解决方法:
使用system.data.sqltypes.sqldatetime.minvalue替代system.datetime类型,这样sqldatetime的minvalue和sql中datetime的范围吻合,就不会再出现以上的错误了。
但是如果直接将system.data.sqltypes.sqldatetime.minvalue 赋值给 system.datetime类型的变量会出现如下错误:错误 86 无法将类型“system.data.sqltypes.sqldatetime”隐式转换为“system.datetime”。存在一个显式转换(是否缺少强制转换?) 我们可以采用convert.todatetime来进行强制转换。
附:sqlserver数据库的datetime默认值为 1900/1/1 00:00:00,如果插入null值,会默认为1900/1/1 00:00:00。