Sql server 在SQL Server和;VB.Net
我正在开发一个VB.Net应用程序,它的操作严重依赖于日期和时间。如果应用程序日期格式与服务器日期格式不匹配,则可能会在日期格式上发生冲突。解决此问题的最佳做法是什么。我知道SQL ServerSql 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标识其日期时间格式&每当我尝试插入日期时间值时,我都会将其转换为应用程序启动时
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
独立于SQL Server中的日期格式设置,在所有情况下都将不工作李>YYYY-MM-DD
- 日期和时间的
-此处注意:此格式有破折号(但可以省略),并且在YYYY-MM-DDTHH:MM:SS
的日期和时间部分之间有一个固定的DATETIME
分隔符T
日期
数据类型(仅日期
-非日期时间
!),那么您确实也可以使用YYYY-MM-DD
格式,这也适用于SQL Server中的任何设置
不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用YYYYMMDD
格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置
对于SQL Server 2008及更新版本,如果只需要日期部分,建议使用
DATE
;如果同时需要日期和时间,建议使用DATETIME2(n)
。如果可能的话,你应该试着逐步淘汰DATETIME
数据类型使用参数化查询完成了这个技巧,现在数据库将自动处理它,无论我传入哪种格式。谢谢。非常好和完整的答案+1