SqlDateTime溢出该怎么解决

错误出现:导入数据时出现“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。

(0)

相关推荐

  • MySQL时间字段究竟使用INT还是DateTime的说明

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` int(10) unsigned NOT NULL DEFAULT '0'; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用在字段上转换运算,直接用于时间比较!二来如下所述效率也更高. 归根结底:用int来代替data类型,更高效. 环境: Windows XP PHP Version 5.2.9 MySQL Server 5.1 第一步.创建一个表date_test(非

  • 使用 MySQL Date/Time 类型

    由于曾经和他是同一个团队的,所以对于其我很熟悉他那"洁癖"的做法,对于他的很多的观点我也非常的赞同:但是有一件非常不理解的地方就是设计数据库的时候总是会回避使用 Date/Time 类型.他的做法是将时间相关的字段设置为 INT(10) 类型,然后用 UNIX 时间戳来存储.而我本人对于这点做法非常的不赞同: 首先,是类型操作的不同,类似于 wiLdGoose 这样做法的"时间计算"实质上是整形之间的操作(而且这个整形非常大,长度为 10).更有甚者,将时间戳设置为

  • mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数

    from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值格式化 例如: mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' ) ->20071120 mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' ) ->2007年11月20 UNIX_TI

  • sql语句中如何将datetime格式的日期转换为yy-mm-dd格式

    如果在asp中我们可以用year(date())这样的格式在sql语句中,不知道这样的效率怎么样不过是个方法 复制代码 代码如下: select substring(convert(char,registdate,120),1,10) as registdate from tbuser

  • Sql中将datetime转换成字符串的方法(CONVERT)

    一.回顾一下CONVERT()的语法格式:CONVERT (<data_ type>[ length ], <expression> [, style])二.这里注重说明一下style的含义:style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式:一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varc

  • sqlserver和oracle中对datetime进行条件查询的一点区别小结

    首先,看一下sql server,之前我们都通过前台用户选择一个起始时间和一个结束时间(以日为最小单位),然后来作为条件进行查询,如果直接通过"between starttime and endtime"来作为条件的话,发现会自动将"2009-06-17"转化为" 2009-06-17 00:00:00",于是如下查询条件" between '2009-06-16' and '2009-06-17'",只能得到16日的数据,1

  • SQLSERVER 中datetime 和 smalldatetime类型分析说明

    datetime 和 smalldatetime 代表日期和一天内的时间的日期和时间数据类型. Microsoft SQL Server 用两个 4 字节的整数内部存储 datetime 数据类型的值.第一个 4 字节存储 base date (即 1900 年 1 月 1 日)之前或之后的天数.基础日期是系统参考日期.不允许早于 1753 年 1 月 1 日的 datetime 值.第一个4 字节:1900 年1 月1 日当日为0 :之前的日期是负数:之后日期是正数.另外一个 4 字节存储以午

  • sql server中datetime字段去除时间的语句

    select CONVERT(varchar, getdate(), 120 )  2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')  20040912110608 select CONVERT(varchar(12) , getdate(), 111 )  2004/09/12 select CONVER

  • MySql用DATE_FORMAT截取DateTime字段的日期值

    用 DATE_FORMAT 来格式化日期字段 SELECT DATE_FORMAT(crt_time,'%Y-%m-%d') FROM ad_n_advertise_t

  • sql server中datetime字段去除时间代码收藏

    select CONVERT(varchar, getdate(), 120 )  2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')  20040912110608 select CONVERT(varchar(12) , getdate(), 111 )  2004/09/12 select CONVER

随机推荐