Error - SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM,怎么解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我一直在使用我编写的这段代码,它以最不清楚的方式工作。我希望在数据库中插入一行,其中包含两列日期时间:

myrow.ApprovalDate = DateTime.Now
myrow.ProposedDate = DateTime.Now

然而,当我更新数据库时,我会收到以下错误:

SqlDateTime溢出。必须在1753年1/1-12:00:00至12/31/9999之间11:59:59

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

// I copied this value from the DB
myrow.ApprovalDate =  Convert.ToDateTime("2008-12-24 00:00:00.000");

同样的错误,奇怪的是,上面的技巧适用于DB的第一个插入,但从那时起失败了。有什么想法吗?

提问于
用户回答回答于

使用以下方法对于SQL min/max日期非常有效:

DateTime rngMin = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;

DateTime rngMax = (DateTime)System.Data.SqlTypes.SqlDateTime.MaxValue;
用户回答回答于

您可能有一个未设置的日期时间值,您正试图将其传递到数据库。

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

最后,如果你发现自己通过了一个C#DateTime作为SQL的字符串,您需要将其格式化如下,以保持最大精度并防止SQL服务器引发类似的错误。

string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");

考虑使用sqlDateTime2数据类型,它与.NET更好地对齐DateTime有日期范围0001-01-01 through 9999-12-31和时间范围00:00:00 through 23:59:59.9999999

string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

扫码关注云+社区