SqlParameter Datetime SqlValue 与 Value 的差异

Kan*_*Gim 4 c# t-sql sql-server datetime

我有一个日期时间值要传递到SqlParameter.

日期时间对象值

然而当传递到myCmd.Parameters.Add("@TrxDate", adt_TrxDate);

SqlParameter SqlValue & Value 属性是差值

发现执行查询时增加了一天。我在探查器中发现了这个问题,最后发现SqlParameter SqlValue& Value 属性是不同的值。为什么会发生这种情况,有什么想法吗?

Aka*_*ava 5

根本原因是,.NET DateTime 的精度比 SQL Server 的 DateTime 更高。所以它是四舍五入的。SQL Server 2008开始,DateTime2支持更高的精度。

由于 SQL 中的数据类型为 DateTime,因此 SQL 参数将 .net DateTime 舍入为最接近的 Sql DateTime。由于它是舍入算法,因此可能会添加.003、.007或删除,您可以查看此SO问题以了解更多详细信息。SQL Server 中 DateTime 的不需要的舍入,因此有时,如果添加的微秒加起来,如果它在两天之间的边界上,它实际上可能会更改为下一天。

来自 MSDN,

https://msdn.microsoft.com/en-us/library/system.data.sqldbtype(v=vs.110).aspx

约会时间。日期和时间数据的值范围为 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。

DateTime2 日期和时间数据。日期值范围是从公元 1,1 月到公元 9999 年 12 月 31 日。时间值范围为 00:00:00 至 23:59:59.9999999,精度为 100 纳秒。

所以我想如果您将参数类型更改为 DateTime2 它将保留实际时间。但是,除非您的 SQL Server 的列类型为 DateTime2,否则这不会产生任何效果。