从DateTime转换为SqlDateTime是不准确的

Ev.*_*Ev. 8 c# asp.net

我有一个从源(a DataRow或a SqlDataReader)获取日期属性的方法:

protected SqlDateTime GetSqlDateTimePropertyValue(string propertyName, object source)
{
  var objValue = GetPropertyValue(propertyName, source);
  var value = objValue == DBNull.Value ? null : (DateTime?)objValue;
  var sqlValue = new SqlDateTime();
  if (value.HasValue) sqlValue = value.Value;
  return sqlValue;
}
Run Code Online (Sandbox Code Playgroud)

但转换似乎是稍微改变日期,以便我的测试总是失败.

有谁知道为什么这种方法会错误地转换?

在方法结束时,看起来转换为进行SqlDateTime一些舍入:

value.Value.Ticks:        634698391707468296
sqlValue.Value.Ticks:     634698391707470000
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 9

是 - SQL Server DATETIME的准确度为3.33ms - 但.NET数据类型可以表示单毫秒.

因此,您有时会遇到一些舍入问题.

在这里阅读更多关于DATETIME数据类型及其属性和怪癖的信息:

揭开SQL Server DATETIME数据类型的神秘面纱

此外,SQL Server 2008引入了一系列与日期相关的新数据类型 - 请阅读以下内容:

SQL Server 2008新的DATETIME数据类型

这些类型包括一个DATETIME2精确到100ns 的数据类型.