|

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间
在从网站执行更新操作的时候,一直报错,我一开始以为是xml配置或者在sql语句执行的时候出了什么问题
我试着用sql查询分析器,抓了一下生成的sql语句,发现,能正确执行,到底是哪里的问题呢?sql语句如下:
exec sp_executesql N'INSERT INTO dbo.LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, NowLeanAlarmType, InsertTime, TreatedTime) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6); select SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 datetime,@p6 datetime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间---解决办法
错误原因
传给数据库的时间类型的值为NULL,或者为DateTime.MinValue插入或者更新数据库时,datetime字段值为空默认插入0001年01月01日造成datetime类型溢出。
这里的NULL指的是程序代码里面的null,大多数出现这种情况的情景是:在程序里面定义了一个时间类型的变量,没有给赋值,就传给数据库(或存储过程了)。这时这个变量的值默认是赋成了01年01月01日。
由于数据库中DateTime类型字段,最小值是1/1/1753 12:00:00,而.NET Framework中,DateTime类型,最小值是1/1/0001 0:00:00,显然,超出了sql的值的最小值范围,导致数据溢出错误。
我们来看看如何通过C#看.net和sql的最大小时间:
输出效果:
最后,捣鼓了十几分钟吧,
最后错误原因如下:
对象的其中一个属性类型也是对象,也就是表有外键,外键表新加了一个datetime的属性,并没有赋值,也没有设置为可空类型
在新增或者更新对象的时候,外键对象的datetime自动附上了默认值,由于.net默认值的时间比数据库的默认最小时间还要小
解决办法:在外键对象的一个datetime类型的属性设置为可空类型,帮同事完美解决!
|
上一篇:.net/c# 操作redis缓存增删改查[源码]下一篇:asp.net 网站异常错误分析
|