Sql server VB.Net DateTime与SQL DateTime匹配吗?

Sql server VB.Net DateTime与SQL DateTime匹配吗?,sql-server,vb.net,datetime,Sql Server,Vb.net,Datetime,我正在尝试使用VB.NET EntityFramework添加一个新记录,其中的字段类型为DateTime 这两种类型的DateTime是否匹配,以允许直接保存而无需任何强制转换或格式设置 也就是说,应该进行以下工作(其中表是WidgetResult,我尝试添加新记录) 我在这方面查阅了很多其他帖子,但它们似乎都与插入查询有关,而不是使用EF提供的方法。是的,它们的格式是兼容的。但是,如果您试图将SQL Server DateTime(GetDate())与VB DateTime.Now进行比较

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

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

也就是说,应该进行以下工作(其中表是WidgetResult,我尝试添加新记录)


我在这方面查阅了很多其他帖子,但它们似乎都与插入查询有关,而不是使用EF提供的方法。

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

如果可能,您希望SQL Server使用而不是(但它仅从2008年起可用)

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

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


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

其他答案基本上是正确的,因为类型是兼容的,但它们并不完全相同

最大的区别是Damien所描述的
datetime
的范围和精度是有限的,而
datetime2
的范围是
datetime
和可变精度的

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

但是另一个没有讨论的点是,
DateTime
有其非常重要的
.Kind
属性,它是三个
DateTimeKind
值之一。
Utc
本地
,或
未指定
。SQL Server
datetime
datetime2
没有此概念

因此,如果您有
Utc
Local
类型的
DateTime
,当您保存并检索它时,您会发现它现在是
未指定的
。换言之,这种方式在往返旅行中无法生存

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


你可以在我的博客文章中了解更多关于这一点(以及其他问题)。

是的,你试过了吗?™回答得好,谢谢。如果我不需要额外的精度或1753年以前的日期,那么使用DateTime2有什么好处吗?我看到MSDN推荐了它,但我猜额外的精度会占用更多的空间吗?@Toby-令人惊讶的是不会。如果你看一下,你会发现前者总是需要8个字节,而后者需要6-8个字节(取决于你要求的精度)。原来
datetime
的存储效率不高。谢谢@Matt。虽然我现在不需要完成往返行程,但我已经开始怀疑时区问题和服务器时间。如果有人读了这个问题,我强烈建议大家点击阅读Matt的博客文章,因为这非常有帮助。
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