我正在开发一个VB.Net应用程序,该应用程序的操作严重依赖日期和时间。如果应用程序日期格式与服务器日期格式不匹配,则日期格式可能会发生冲突,因此解决此问题的最佳实践是什么。我知道SQL Serverdatetime
格式取决于服务器语言,而VB.Net将使用本地计算机的日期时间格式。这意味着,如果用户更改日期时间格式,则在插入时会引起问题。
我的想法是SELECT GETDATE()
在应用程序启动时使用,然后使用VB.Net标识其日期时间格式,每当我尝试插入日期时间值时,我都会将其转换为应用程序启动时确定的日期时间格式。
是否有更好的方法在应用程序和SQL Server之间具有一致的日期时间格式以避免冲突。例如:混合一天和一个月。
SQL Server不会DateTime
以任何字符串格式存储a-它以8字节数字值存储。
各种设置(语言,日期格式)仅影响DateTime
在SQL Server Management Studio中向您显示的方式-或当您尝试将字符串转换为时如何对其进行解析DateTime
。
SQL Server支持多种格式-有关CAST和CONVERT的信息,请参见MSDN联机丛书。这些格式中的大多数取决于您所拥有的设置-因此,这些设置有时可能会起作用-有时不起作用。
因此,如果可能的话,不要DateTime
一直在日期和字符串之间转换!将其保留为DateTime
.NET中的值,使用DATE
或DATETIME2(n)
SQL Server中的值,并使日期保持其原始格式。使用支持本机数据类型的参数化查询,DateTime
因此您无需将日期转换为字符串然后返回!
如果出于某种原因必须使用字符串表示日期,则解决此问题的唯一可靠方法是使用SQL Server支持的(略微适应)ISO-8601日期格式-该格式始终有效-不管您使用哪种SQL Server语言和dateformat设置。
在ISO-8601格式由SQL Server支持有两种形式:
YYYYMMDD
只是日期(无时间部分);注意:没有破折号!,那非常重要!YYYY-MM-DD
是不是独立于你的SQL Server的日期格式设置,将不适用于所有情况!或者:
YYYY-MM-DDTHH:MM:SS
日期和时间-请在此处注意:此格式带有破折号(但可以省略),并T
在的日期和时间部分之间固定为定界符DATETIME
。这对SQL Server 2000及更高版本有效。
如果使用SQL Server 2008或更高版本以及DATE
数据类型(仅DATE
-不使用 DATETIME
!),则实际上也可以使用该YYYY-MM-DD
格式,并且该格式也可以在SQL Server中进行任何设置。
不要问我为什么整个主题如此棘手且有些令人困惑-这就是事实。但是使用该YYYYMMDD
格式时,对于SQL Server的任何版本以及SQL Server中的任何语言和dateformat设置,都应该没问题。
DATE
如果只需要日期部分,并且DATETIME2(n)
同时需要日期和时间,则建议使用SQL Server 2008及更高版本。DATETIME
如果可能,您应该尝试逐步淘汰数据类型
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句