#背景

  向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. python3.7之12306抢票脚本实现

    悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...

  2. 洛谷P2722总分题解

    题目 这个题是一个裸的完全背包问题,但是数组需要开大, 代码 #include<iostream> using namespace std; int n,m,v,i; int c[1000 ...

  3. 【XSY2751】Mythological IV 线性插值

    题目描述 已知\(f(x)\)为\(k\)次多项式. 给你\(f(0),f(1),\ldots,f(k)\),求 \[ \sum_{i=1}^nf(i)q^i \] \(k\leq 500000,n\ ...

  4. thinkPHP框架5.0 类图下载

    thinkPHP5.0 类图下载

  5. 【LOJ#6060】Set(线性基)

    [LOJ#6060]Set(线性基) 题面 LOJ 题解 好题啊QwQ. 首先\(x1\oplus x2=s\)是定值.而\(s\)中假设某一位上是\(1\),则\(x1,x2\)上必定有一个是\(1 ...

  6. ES6中箭头函数与普通函数this的区别

    普通函数中的this: 1. this总是代表它的直接调用者, 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'use strict'),没找到直 ...

  7. Who Gets the Most Candies? POJ - 2886 (线段树)

    按顺时针给出n个小孩,n个小孩每个人都有一个纸,然后每个人都有一个val,这个val等于自己的因子数,如果这个val是正的,那就顺时针的第val个孩子出去,如果是负的话,就逆时针的第val个孩子出去, ...

  8. 【php】php实现数组反转

    php里面有个函数可以反转数组,工作中也经常用到,非常方便.今天来自己实现这样的功能. $arr = [2,5,6,1,8,16,12]; function reverse($arr){ $left ...

  9. thinkphp5 如何使用查询事件?

    它是对数据库的CURD操作事件进行了钩子,当事件触发时,会进行回调. 就像是注册事件和前置方法或后置方法类似 下面是demo <?php namespace app\index\controll ...

  10. JBoss/Wildfly 配置SQLserver服务器

    JBoss/Wildfly 配置SQLserver服务器 http://blog.csdn.net/haitaolang/article/details/60467118 wildfly standa ...