当我在数据库中存储值为DateTime.MaxValue的日期属性并将其恢复时,存储的值不等于DateTime.MaxValue。蜱性关闭。为什么是这样?.net一旦存储在数据库中,DateTime MaxValue就会不同
使用MS SQL,对于日期字段的数据类型是“日期时间”
当我在数据库中存储值为DateTime.MaxValue的日期属性并将其恢复时,存储的值不等于DateTime.MaxValue。蜱性关闭。为什么是这样?.net一旦存储在数据库中,DateTime MaxValue就会不同
使用MS SQL,对于日期字段的数据类型是“日期时间”
由于SQL日期时间分辨率较低。
在MS SQL与一种 三百分之第二,或3.33毫秒 的精度的DateTime数据类型 表示日期和时间数据从 1753年1月1日至 12月31日,9999,。值四舍五入为.000,.003,或0.007 毫秒 增量。
在.net 的日期时间值类型通过 11:59表示从 12:00:00午夜,0001年1月1 公元(共同的时代)的日期和时间:59PM,9999年12月31日公元 (CE)时间值的测量值为 100纳秒单位称为蜱。
FWIW - 我被告知这将在SQL Server 2010中解决(或者任何他们将它释放),以便DateTime数据类型匹配。 – dolphy 2011-05-25 15:54:30
@dolphy,在某种程度上他们已经在SQL 2008中“修复”了它 - 它具有新的日期和时间数据类型,这将允许更多(或更少)的精度。我非常怀疑MS会不会改变“旧”日期时间数据类型的工作方式,因为这将破坏大量现有代码并剥离大部分现有客户群。 – 2011-05-25 16:02:54
@菲利普凯利 - 这正是我所指的。我没有意识到这是在SQL 2008中完成的。我想这表明我的公司仍然在SQL 2005上:-) – dolphy 2011-05-25 16:17:59
我必须承认,我不是这肯定的,但它可能是与日期时间的准确性呢?
在这里做一个快速的搜索是在 Precision and accuracy of DateTime
的一篇文章也说不定有日期时间的在C#与SQL精度之间的mistmatch?
您正在存储此值的数据字段的类型是什么?
可能是因为.NET DateTime
的最大值超过了数据库引擎中等效数据类型的容量。
这很可能会导致.NET DateTime不会直接转换为SQL DateTime类型。
我会同时设置该值,然后检查SqlDateTime.MaxValue
的勾号。
MS SQL服务器做一些奇怪的事情在最低水平日期。例如,考虑下面的脚本:
select
test1 = dateadd(ms,-1,convert(datetime,'20110504')),
test2 = dateadd(ms,-2,convert(datetime,'20110504')),
test3 = dateadd(ms,-3,convert(datetime,'20110504')),
test4 = dateadd(ms,-4,convert(datetime,'20110504')),
test5 = dateadd(ms,-5,convert(datetime,'20110504')),
test6 = dateadd(ms,-6,convert(datetime,'20110504'))
这将返回:
test1 test2 test3 test4 test5 test6
----------------------- ----------------------- ----------------------- ----------------------- ----------------------- -----------------------
2011-05-04 00:00:00.000 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.993 2011-05-03 23:59:59.993
正如你可以看到MS SQL只处理毫秒到最近3.如果这些他们得到四舍五入之间去。有可能这是DateTime.MaxValue存储在SQL中时发生的情况。
你正在使用什么数据库以及数据库中存储日期的数据类型? – David 2011-05-25 15:43:02
非常有趣的问题@ dev.e.loper – 2011-05-25 15:45:59
你试过datetime2吗? http://technet.microsoft.com/en-us/library/bb677335.aspx – 2011-05-25 15:50:27