#背景

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

 DateTime t=new DateTime();
DateTime t1 = DateTime.MinValue;
DateTime t2 = DateTime.MaxValue;
DateTime t3 = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
DateTime t4 = (DateTime)System.Data.SqlTypes.SqlDateTime.MaxValue;
Console.WriteLine(".net中DateTime默认值{0}", t);
Console.WriteLine(".net最小时间为{0}", t1);
Console.WriteLine(".net最大时间为{0}", t2);
Console.WriteLine("SQL最小时间为{0}", t3);
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)
												

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

  1. 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间

    在ERP中定义用户时.   报错: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 原因分析: ①没有正确初 ...

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

    出现的错误:SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 错误的原因:.NET Framework dat ...

  3. 解决:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间提示问题

    提示信息如下 “/”应用程序中的服务器错误. SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 问题现象: 问 ...

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

    原因: 出现这种问题多半是因为你插入或者更新数据库时,datetime字段值为空默认插入0001年01月01日造成datetime类型溢出. 传给数据库表的时间类型值是null值.这里的null指的是 ...

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

    原因: .NET中  DateTime最小值为: 0001-1-1 0:00:00 数据库中DateTime最小值为: 1753-1-1 0:00:00, 很明显:.NET中的最小值超出了数据库时间类 ...

  6. SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

    相信很多人进行数据存储时,会遇上如标题的异常错误. 其实也不算上一个错误. 当你的程序中有宣告一个字段的数据类型为DateTime时,但你又没有赋值给它,就进行存储时,它就会得到这样一个结果. 看看下 ...

  7. Error - SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM

    I find using the following works quite well for SQL min/max dates after many DB related errors: Date ...

  8. SqlDateTime 溢出。

    SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间 解决方法:不要怀疑自己的判断就是数据库字段里的datatime ...

  9. 关于SqlDateTime溢出的问题

    问题:  项目中为了在时间上保持一致性,将所有时间都转化为了UTC时间. 其中有一段SqlDateTime.MinValue的代码,由于疏忽将其转为UTC时间后导致了 "SqlDateTim ...

随机推荐

  1. .net core 2.0 webuploader上传图片

    引入文件 <link href="~/Scripts/webuploader-0.1.5/webuploader.css" rel="stylesheet" ...

  2. POJ 2299 -Ultra-QuickSort-树状数组求逆序数

    POJ 2299Ultra-QuickSort 使用树状数组记录逆序对数. 把数组按照大小顺序插入,getsum(i)就是i前面的比他大的数. #include <cstdio> #inc ...

  3. bzoj1559 [JSOI2009]密码

    题目链接:[JSOI2009]密码 我们先看第一问:输出方案数 我们把所有给出来的串丢到AC自动机里面去,然后在建出来的\(trie\)图上跑dp 由于\(n\leq 10\)我们很自然的就想到了状压 ...

  4. YC的基本创业建议

    原文出处:https://blog.ycombinator.com/ycs-essential-startup-advice/ 我们给初创公司的许多建议都是战术性的; 意味着在日常或周到周的基础上有所 ...

  5. 2019西北工业大学程序设计创新实践基地春季选拔赛 I Chino with Rewrite (并查集+树链剖分+线段树)

    链接:https://ac.nowcoder.com/acm/contest/553/I 思路:离线整棵树,用并查集维护下联通的情况,因为值只有60个,用2的x(1<=x<=60)次方表示 ...

  6. MT【269】含参函数绝对值最大

    设函数$f(x)=ax^2+(2b+1)x-a-2$($a,b\in\mathcal R$,$a\neq 0$). (1) 若$a=-2$,求函数$y=|f(x)|$在$[0,1]$上的最大值$M(b ...

  7. MT【247】恒成立画图像

    若$|x^2+|x-a|+3a|\le2$对任意$x\in[-1,1]$恒成立,则$a$ 的取值范围_____ 分析:转化为$f(x)=|x-a|+3a$的图像夹在$y=-2-x^2$与$y=2-x^ ...

  8. AtCoder ExaWizards2019题解

    AtCoder ExaWizards2019题解 AtCoder (因为代码直接用模板写的,可能有点冗长) A.Regular Triangle 给你三根棍子的长度,问你能否用他们组成等边三角形. 什 ...

  9. js-基本语法

    条件语句 通过条件来控制程序的走向,就需要用到条件语句. 运算符 1.算术运算符: +(加). -(减). (乘). /(除). %(求余) 2.赋值运算符:=. +=. -=. =. /=. %= ...

  10. 「HNOI2016」序列 解题报告

    「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...