我有一个从源(aDataRow或aSqlDataReader)获取date属性的方法:

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;
}

但是转换似乎稍微改变了日期,所以我的测试总是失败。
有人知道为什么这种方法会被错误地转换吗?
在方法的末尾,转换为SqlDateTime似乎会进行一些舍入:
value.Value.Ticks:        634698391707468296
sqlValue.Value.Ticks:     634698391707470000

最佳答案

是-SQL ServerDATETIME的精度为3.33ms,-.NET数据类型可表示单个毫秒。
因此,您有时会遇到一些舍入问题。
在这里阅读有关DATETIME数据类型及其属性和特性的更多信息:
Demystifying the SQL Server DATETIME datatype
此外,SQL Server 2008引入了许多与日期相关的新数据类型—请阅读以下内容:
SQL Server 2008 New DATETIME datatypes
这些类型确实包含一个精确到100ns的DATETIME2数据类型。

08-18 03:48