首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误- 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之间
EN

Stack Overflow用户
提问于 2009-01-22 12:29:26
回答 14查看 260.8K关注 0票数 88

我一直在使用我写的这段代码,它以一种最不明确的方式工作。我希望在包含两列DateTime的数据库中插入一行:

代码语言:javascript
复制
myrow.ApprovalDate = DateTime.Now
myrow.ProposedDate = DateTime.Now

然而,当我更新数据库时,我收到了这个错误:

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

我甚至尝试过从数据库中复制一个插入值,并将其硬编码到正在更新的对象中:

代码语言:javascript
复制
// I copied this value from the DB
myrow.ApprovalDate =  Convert.ToDateTime("2008-12-24 00:00:00.000");

同样的错误,奇怪的是,上面的技巧在第一次插入数据库时有效,但从那时起就失败了。知道是怎么回事吗?

EN

回答 14

Stack Overflow用户

发布于 2009-01-22 05:03:46

ADateTimein C#是值类型,而不是引用类型,因此不能为null。但是,它可以是常量DateTime.MinValue,它不在Sql服务器的范围内。DATETIME数据类型。

值类型保证总是有一个(默认)值(0),而不需要总是显式设置(在本例中是DateTime.MinValue)。

结论是您可能有一个试图传递给数据库的未设置的DateTime值。

代码语言:javascript
复制
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999, 
                    exactly one 100-nanosecond tick 
                    before 00:00:00, January 1, 10000

MSDN:DateTime.MinValue


关于Sql Server

日期时间

从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之一秒(相当于3.33毫秒或0.00333秒)。将值四舍五入为.000、.003或.007秒的增量

小日期时间

从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。小于或等于29.998秒的SmalldateTime值向下舍入到最接近的分钟;大于或等于29.999秒的值向上舍入到最接近的分钟。

MSDN:Sql Server DateTime和SmallDateTime


最后,如果您发现自己正在传递一个C#DateTime

作为sql的字符串,您需要将其格式化为以下格式,以保持最大的精度并防止sql server引发类似的错误。

代码语言:js
复制
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

更新(8年后)

考虑使用sqlDateTime2更符合.net的数据类型DateTime包含日期范围0001-01-01 through 9999-12-31

和时间范围00:00:00 through 23:59:59.9999999

代码语言:js
复制
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

MSDNdatetime2 (Transact-SQL)

票数 94
EN

Stack Overflow用户

发布于 2010-12-17 07:53:19

我发现在发生了许多与数据库相关的错误后,使用下面的方法可以很好地处理SQL最小/最大日期:

代码语言:javascript
复制
DateTime rngMin = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;

DateTime rngMax = (DateTime)System.Data.SqlTypes.SqlDateTime.MaxValue;
票数 89
EN

Stack Overflow用户

发布于 2011-08-09 11:22:35

在将.Net DateTime与SqlDateTime.MinValue或MaxValue进行比较时要小心。例如,以下代码将抛出异常:

代码语言:javascript
复制
DateTime dte = new DateTime(1000, 1, 1);
if (dte >= SqlDateTime.MinValue)
    //do something

原因是MinValue返回的是SqlDateTime,而不是DateTime。因此,.Net尝试将dte转换为SqlDateTime进行比较,因为它超出了可接受的SqlDateTime范围,所以会抛出异常。

一种解决方案是将您的DateTime与SqlDateTime.MinValue进行比较。价值..。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/468045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档