Sql server 服务器区域性:将varchar数据类型转换为datetime数据类型导致值超出范围
我最近将一个网站从一个windows服务器移动到了一个新的2016框中。除了站点的一部分正在运行sql查询,但在将查询结果读入datareader时出错之外,一切似乎都很好。如果我将应用程序发送到sql server的sql(使用探查器),我可以在SSMS中很好地运行它,但是如果我在visual studio中调试执行sql的行,我会看到以下错误: “将varchar数据类型转换为datetime数据类型 导致值超出范围。“Sql server 服务器区域性:将varchar数据类型转换为datetime数据类型导致值超出范围,sql-server,vb.net,sqldatareader,Sql Server,Vb.net,Sqldatareader,我最近将一个网站从一个windows服务器移动到了一个新的2016框中。除了站点的一部分正在运行sql查询,但在将查询结果读入datareader时出错之外,一切似乎都很好。如果我将应用程序发送到sql server的sql(使用探查器),我可以在SSMS中很好地运行它,但是如果我在visual studio中调试执行sql的行,我会看到以下错误: “将varchar数据类型转换为datetime数据类型 导致值超出范围。“ 现在我可以看到应用程序以这种格式“1998/08/31”传递了一些日期
现在我可以看到应用程序以这种格式“1998/08/31”传递了一些日期,IIS/SQL中是否存在可能导致问题的区域性设置?避免此错误的最佳方法是Sean Lange&Damien the_the_Unsiver的评论 你应该这样做。
回答你的问题: IIS/SQL中是否存在可能导致问题的区域性设置 对 Sql Server的
dateformat
由语言设置隐式设置。通过查询sys.syslanguages
,可以查看每种语言的默认设置,每种语言的默认日期格式在dateformat
列中
select * from sys.syslanguages;
您可以使用set dateformat ymd显式设置会话日期格式代码>或会话语言与设置语言美国英语代码>
是,日期格式可能导致这种情况发生。如果删除反斜杠,则它将是独立于日期格式的。或者,更理想的情况是,从输入字符串的位置开始,尽早将字符串转换为DateTime
。在从UI到数据库的整个过程中,将其保存在DateTime
(或DateTime
)变量/参数中。信任ADO.Net在.Net和SQL Server数据类型之间进行转换。避免再次将其放入字符串中,这样可以避免字符串转换错误。在检索时将该字段的字符串结果转换为datetime
,或用作字符串。但将日期作为字符串保存在DB中是一件非常糟糕的事情。你说的是“应用程序通行证”-让应用程序通行证成为新的DateTime(年、月、日)
,你当然知道如何解析1998/08/31