Sql server 在SQL Server和;VB.Net

Sql server 在SQL Server和;VB.Net,sql-server,vb.net,datetime,datetime-format,Sql Server,Vb.net,Datetime,Datetime Format,我正在开发一个VB.Net应用程序,它的操作严重依赖于日期和时间。如果应用程序日期格式与服务器日期格式不匹配,则可能会在日期格式上发生冲突。解决此问题的最佳做法是什么。我知道SQL Serverdatetime格式取决于服务器语言&VB.Net将使用本地机器的datetime格式。这意味着,如果用户更改日期时间格式,则在插入时会出现问题 我的想法是在应用程序启动时使用selectgetdate(),然后使用VB.Net标识其日期时间格式&每当我尝试插入日期时间值时,我都会将其转换为应用程序启动时

我正在开发一个VB.Net应用程序,它的操作严重依赖于日期和时间。如果应用程序日期格式与服务器日期格式不匹配,则可能会在日期格式上发生冲突。解决此问题的最佳做法是什么。我知道SQL Server
datetime
格式取决于服务器语言&VB.Net将使用本地机器的datetime格式。这意味着,如果用户更改日期时间格式,则在插入时会出现问题

我的想法是在应用程序启动时使用
selectgetdate()
,然后使用VB.Net标识其日期时间格式&每当我尝试插入日期时间值时,我都会将其转换为应用程序启动时标识的日期时间格式


是否有更好的方法在应用程序和SQL Server之间使用一致的日期时间格式以避免冲突。例如:把一天和一个月混在一起。

SQL Server不以任何字符串格式存储日期时间,而是以8字节的数值存储

各种设置(语言、日期格式)仅影响在SQL Server Management Studio中向您显示日期时间的方式,或者在您尝试将字符串转换为日期时间时如何解析日期时间

SQL Server支持多种格式-请参阅。大多数格式取决于您的设置,因此,这些设置有时可能有效,有时无效

因此,如果可能,不要一直在
DateTime
和string之间转换日期!在.NET中将其保留为
DateTime
,在SQL Server中使用
DATE
DATETIME2(n)
,并将日期设置为其本机格式。使用支持本机
DateTime
数据类型的参数化查询,这样您就不需要将日期转换为字符串并返回

如果出于任何原因必须使用字符串来表示日期,解决此问题的唯一可靠方法是使用SQL Server支持的(略微调整的)ISO-8601日期格式
,无论您的SQL Server语言和日期格式设置如何,此格式始终有效

SQL Server支持的有两种风格:

  • YYYYMMDD
    仅适用于日期(无时间段);注意:无破折号,这非常重要
    YYYY-MM-DD
    独立于SQL Server中的日期格式设置,在所有情况下都将工作
或:

  • 日期和时间的
    YYYY-MM-DDTHH:MM:SS
    -此处注意:此格式有破折号(但可以省略),并且在
    DATETIME
    的日期和时间部分之间有一个固定的
    T
    分隔符
这对SQL Server 2000及更新版本有效

如果您使用SQL Server 2008或更高版本以及
日期
数据类型(仅
日期
-
日期时间
!),那么您确实也可以使用
YYYY-MM-DD
格式,这也适用于SQL Server中的任何设置

不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用
YYYYMMDD
格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置


对于SQL Server 2008及更新版本,如果只需要日期部分,建议使用
DATE
;如果同时需要日期和时间,建议使用
DATETIME2(n)
。如果可能的话,你应该试着逐步淘汰
DATETIME
数据类型

使用参数化查询完成了这个技巧,现在数据库将自动处理它,无论我传入哪种格式。谢谢。非常好和完整的答案+1