c# - 从 DateTime 转换为 SqlDateTime 不准确

标签 c# asp.net

我有一个从源(DataRowSqlDataReader)获取日期属性的方法:

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 Server DATETIME 的精度为 3.33 毫秒 - 但是 .NET 数据类型可以表示单毫秒。

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

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

Demystifying the SQL Server DATETIME datatype

此外,SQL Server 2008 引入了大量新的与日期相关的数据类型 - 在此处阅读更多相关信息:

SQL Server 2008 New DATETIME datatypes

这些类型确实包括一个 DATETIME2 数据类型,它精确到 100ns。

关于c# - 从 DateTime 转换为 SqlDateTime 不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117570/

相关文章:

c# - 如何在 ASP.NET Web API 应用程序中调用另一种异步方法

asp.net - https ://api-secure. recaptcha.net/上的 recaptcha https 问题

c# - .NET C# 中的简单 OCR 问题

c# - 哪种设计最适合这种情况?

c# - 如何比较 SolidColorBrushes?

c# - 如何将 Silverlight Toolkit DataGrid 单元格值绑定(bind)到 TextBlock 或 TextBox 文本属性

c# - 如何检查3个手指是否放在屏幕上

asp.net - ASP.AJAX TabContainer/TabPanel 定制

c# - 如何将javascript日期存储到sql server中?

c# - 如何在 LinkBut​​ton 单击事件上启动电子邮件客户端?