Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 服务器区域性:将varchar数据类型转换为datetime数据类型导致值超出范围_Sql Server_Vb.net_Sqldatareader - Fatal编程技术网

Sql server 服务器区域性:将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”传递了一些日期

我最近将一个网站从一个windows服务器移动到了一个新的2016框中。除了站点的一部分正在运行sql查询,但在将查询结果读入datareader时出错之外,一切似乎都很好。如果我将应用程序发送到sql server的sql(使用探查器),我可以在SSMS中很好地运行它,但是如果我在visual studio中调试执行sql的行,我会看到以下错误:

“将varchar数据类型转换为datetime数据类型 导致值超出范围。“


现在我可以看到应用程序以这种格式“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