【问题标题】:Does VB.Net DateTime match up to SQL DateTime?VB.Net DateTime 是否与 SQL DateTime 匹配?
【发布时间】:2013-08-21 12:45:08
【问题描述】:

我正在尝试使用 VB.NET EntityFramework 添加一条新记录,其中一个字段的类型为 DateTime。

这两种类型的 DateTime 是否匹配以允许直接保存而无需任何转换或格式化?

I.E 以下是否可行(表是 WidgetResult 并且我尝试添加新记录)

Private Sub AddNewWidgetResultRecord ()
    Dim newWidgetResult As New WidgetResult()
    newWidgetResult.SomeVarChar = "Some widget string"
    newWidgetResult.SomeDateTime = DateTime.Now    ' Would this line be OK?'
    myContext.AddToWidgetResult(newWidgetResult)
    myContext.SaveChanges()
End Sub

我已经查看了很多关于此的其他帖子,但它们似乎都关注 INSERT 查询,而不是使用 EF 提供的方法。

【问题讨论】:

  • 是的,你试过了吗? ™

标签: sql-server vb.net datetime


【解决方案1】:

是的,它们的格式是兼容的。但是,如果您尝试将 SQL Server DateTime (GetDate()) 与 VB DateTime.Now 进行比较,我会注意一件事。你不能保证它们是相等的。

【讨论】:

    【解决方案2】:

    如果可能,您希望 SQL Server 使用 datetime2 而不是 datetime(但它仅在 2008 年以后可用)。

    datetime 本身具有更有限的范围(仅从 1753 年开始,而不是从 0 年开始)和精度(毫秒值四舍五入到以 037 结尾的最接近的值)

    datetime2 (SQL Server) 和 DateTime (.NET) 是兼容的。


    确切地说,您如何确保数据库端使用datetime2 可能取决于您使用的是哪种形式的 EF。

    【讨论】:

    • 很好的答案,谢谢。如果我不需要额外的精度或 1753 年之前的日期,他们使用 DateTime2 有什么优势吗?我看到 MSDN 推荐它,但我猜额外的精度会占用更多空间?
    • @Toby - 出乎意料地没有。如果您查看datetimedatetime2,您会发现前者总是占用8 个字节,而后者占用6-8 个字节(取决于您要求的精度)。事实证明datetime 的存储效率并不高。
    【解决方案3】:

    其他答案大部分正确,因为类型是兼容的,但它们完全等价。

    最大的区别是 Damien 描述了 datetime 如何具有有限的范围和精度,而 datetime2 具有 DateTime 的完整范围和可变精度。

    甘德斯是正确的,你不能保证DateTime.Now == getdate()。这主要是因为您的呼叫之间的时钟滴答作响,但也有可能从 Web 服务器调用 DateTime.Now 而从 SQL Server 调用 getdate() 并且它们位于两台不同的计算机上。他们的时钟可能不完全同步,或者他们可能有不同的时区设置。

    但还有一点没有讨论,DateTime 有其非常重要的.Kind 属性,它是DateTimeKind 三个值之一。 UtcLocalUnspecified。 SQL Server datetimedatetime2 没有这个概念。

    因此,如果您有UtcLocal 类型的DateTime,当您保存并检索它时,您会发现它现在是Unspecified。换句话说 - 那种不能在往返中存活。

    相比之下,相关的 .NET DateTimeOffset 类型将与 SQL Server datetimeoffset 类型完全往返。

    您可以在我的博文The Case Against DateTime.Now 中阅读有关此(以及其他问题)的更多信息。

    【讨论】:

    • 谢谢@Matt。虽然我目前不需要完成往返行程,但我已经开始怀疑时区问题和服务器时间。其他阅读此 Q 的人,我强烈建议您点击阅读 Matt 的博客文章,因为它非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多