#背景

  向sqlserver数据库中一个datetime字段插入DateTime.MinValue时,

  出现问题:

    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的最大小时间:

 1 DateTime t=new DateTime();
 2 DateTime t1 = DateTime.MinValue;
 3 DateTime t2 = DateTime.MaxValue;
 4 DateTime t3 = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
 5 DateTime t4 = (DateTime)System.Data.SqlTypes.SqlDateTime.MaxValue;
 6 Console.WriteLine(".net中DateTime默认值{0}", t);
 7 Console.WriteLine(".net最小时间为{0}", t1);
 8 Console.WriteLine(".net最大时间为{0}", t2);
 9 Console.WriteLine("SQL最小时间为{0}", t3);
10 Console.WriteLine("SQL最大时间为{0}", t4);

  输出效果:

#解决方法

1、确保Datetime类型变量赋值后,再向数据库更新数据;

2、如果数据库中数据类型为Datetime,如果想插入最小值,那在程序中使用System.Data.SqlTypes.SqlDateTime.MinValue替代System.DateTime.MinValue,这样SqlDateTime的MinValue和Sql中DateTime的范围吻合,就不会再出现以上的错误了。也可以将数据库中的Datetime类型修改为Datetime2类型,这样使用System.DateTime.MinValue就不会出现超出范围的情况了;

3、通常情况下,我们不在日期字段里存入空值.当没有日期值时存入'1900-1-1',这个叫做默认时间值。在读取数据的时候,遇到1900-1-1就认为数据库该时间字段没有值;

insert into 表名 (Datetime字段名) values (cast(nullif('程序中传入的时间类型变量','')) as DateTime)


转载于:https://www.cnblogs.com/willingtolove/p/9209377.html

【.NET】SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间相关推荐

  1. SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59

    SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间 2009年10月10日 星期六 17:11 错误提示:" ...

  2. SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间

    如果日期字段为null时,默认的更新是1/1/0001,这样便会出错, 所以在我们想要不输入时间的时候,可以通过数据库默认值的方式或者存储一个不会使用到的时间存储就可以了,例如存储最小值 SqlDat ...

  3. sql中的datetime在java,Dapper SqlDateTime在SQL Server中使用GETDATE()溢出

    我有以下代码从表单获取输入并调用存储过程将其存储在数据库中 . [HttpPost] public ActionResult Index(GuestMessage model) { if (Model ...

  4. Sqlserver中的日期类型值不能小于1753年

    Sqlserver中的日期类型值不能小于1753年,如果输入1752-1-1等,会报错:SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11 ...

  5. JS 获取当前日期时间(兼容IE FF)

    以前在页面中获得当前时间的方法如下: function SelectTodayClient() {var d = new Date();var taday = d.getYear() + " ...

  6. VS2005(c#)项目调试问题解决方案集锦

    1.检测到有潜在危险的 Request.Form 值原因: (1)在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置 (2)HTML里面写了两个<fo ...

  7. Nhibernate+MVC开发日志

    在自己学习NHibernate+MVC时,吃了不少苦,开发中也总结了些问题.发表出来,以便新学者能有所借鉴少走些弯路. Nhibernate 要求model实体类对于lazy="true&q ...

  8. .NET常见错误大全

    .NET常见错误大全 1.检测到有潜在危险的 Request.Form 值 原因: (1)在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置 (2)HTML ...

  9. Nhibernate+MVC开发小结

    在自己学习NHibernate+MVC时,吃了不少苦头,开发中也总结了些问题.发布出来,以便新学者能有所借鉴少走些弯路. Nhibernate 要求model实体类对于lazy="true& ...

最新文章

  1. 用shell脚本配置oracle安装需求
  2. 形象!Google Earth增实时雨雪演示功能
  3. 添加javascript代码:_JavaScript的使用
  4. 每日一皮:程序员和黑客的区别
  5. 腾讯技术直播间 | 当感性遇上理性,当魔术遇上数学
  6. 第一章 Spring基础
  7. sql中的exsits和not exsits
  8. 【PDF】处理pdf 文档的相关功能包总结
  9. Linux系统 nginx伪静态配置及nginx重启
  10. arm x86 区别_深入了解arm架构和x86架构有什么区别及各自的优势选型者重点查看...
  11. Python数据结构与算法--面向对象
  12. stata 自相关专题【计量经济系列(五)】
  13. 各种SKYPE网页代码,SKYPE在线代码
  14. php 网址尾部带斜杠和不带区别,网址中带斜杠和不带斜杠的区别
  15. Word明明有很大空白表格还是自动换页
  16. 从表征到行动---意向性的自然主义进路(续一)
  17. 9.Excel vba开发-转换为大写
  18. 1+X Web前端开发初级考试 模拟试题(一)
  19. php限定符实例,PHP正则表达式限定符说明
  20. Java简单语句项目练习——英雄联盟商城

热门文章

  1. 具有审计表的实体框架
  2. 使用ASP.NET Core MVC的Vue.Js
  3. Kong 1.0 GA 版本正式发布,微服务 API 网关
  4. esd文件转换成gho文件_STL到OBJ:如何将STL文件转换成OBJ ?
  5. appinventor广州服务器网页,app inventor服务器
  6. tcp拥塞控制_面试必备TCP(四):拥塞控制
  7. mysql的comment_mysql的comment怎么用
  8. php数据库单循环显示,php利用while单循环实现100行10列表格输出且每行颜色不一样...
  9. 无线网络的网速很慢_手机信号强,网速慢?你这样设置,网速如飞!快到不可思议...
  10. python open写入_Python IO操作文件读取和写入、open函数的mode参数、buffering,文件缓冲区...