SqlParameter Datetime SqlValue 与 Value 的差值
本文关键字:Value Datetime SqlValue SqlParameter | 更新日期: 2023-09-27 18:35:22
>我有一个日期时间值要传递到SqlParameter
中。
日期时间对象值
但是当传递给myCmd.Parameters.Add("@TrxDate", adt_TrxDate);
SqlParameter SqlValue & Value 属性是差值
发现它在执行查询时增加了一天。我在探查器中发现了这个问题,最后发现SqlParameter SqlValue
& Value 属性是不同的值。为什么会这样,有什么想法吗?
根本原因是,.NET DateTime比SQL Server的DateTime具有更高的精度。所以它是四舍五入的.SQL Server 2008 在病房上,DateTime2 支持更高的精度。
由于数据类型在 SQL 中为 DateTime,因此 SQL 参数将 .net DateTime 舍入到最接近的 Sql DateTime。由于它是舍入算法,它可能会添加.003,.007或删除,您可以查看此SO问题以获取更多详细信息。SQL Server中不需要的日期时间舍入,因此有时,如果添加微秒加起来,如果它在两天之间的边界上,它实际上可能会更改为第二天。
来自 MSDN,
https://msdn.microsoft.com/en-us/library/system.data.sqldbtype(v=vs.110).aspx
日期时间。日期和时间数据的值范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。
日期时间2日期和时间数据。日期值范围为公元 1 月 1 日至公元 9999 年 12 月 31 日,时间值范围为 00:00:00 到 23:59:59.9999999,精度为 100 纳秒。
所以我想如果您将参数类型更改为 DateTime2,它将保留实际时间。但是,除非您的 SQL Server 将列的类型设置为 DateTime2,否则此操作将不起作用。
您必须通过指定参数的SqlDbType
来像下面这样使用:
myCmd.Parameters.Add("@TrxDate",SqlDbType.Date).Value =adt_TrxDate;
如果DateTime
,请使用SqlDbType.DateTime
或者您可以使用AddWithValue
myCmd.Parameters.AddWithValue("@TrxDate",adt_TrxDate);
您可以参考此线程以了解这两者之间的区别