MSSQL的查询不再与Windows 10客户机工作原理:是VARCHAR数据类型为datetime

2019-11-04 00:14发布

我们一直在使用中没有任何问题一个WinForms程序很长一段时间了下面的SQL查询,直到一些最终用户升级到Windows 10。

他们突然得到异常:“ERROR [22007] [微软] [SQL Server本机客户端11.0] [SQL服务器] varchar数据类型为datetime数据类型的转换导致超出范围的值。”

这个错误已经被发布到内部早一点,但我没发现哪里发生了连接到Windows 10升级任何职务。

查询的目标是到SQL Server 2012,使用本机客户端11.它适用于Windows 7和8,但在Windows 10抛出异常:

SELECT DISTINCT tblEmployee.EmployeeID, tblEmployee.Lastname, (COALESCE(tblEmployee.Firstname, '') + ' (' + COALESCE(tblEmployee.EmployeeIDText, '') +')' ) AS Firstname 
FROM tblEmployee 
LEFT JOIN tblAssignmentService ON tblEmployee.EmployeeID = tblAssignmentService.EmployeeID 
WHERE tblAssignmentService.ServiceDate >= '2015-08-31 00.00.00' 
AND tblAssignmentService.ServiceDate < '2015-09-07 00.00.00' 
ORDER BY tblEmployee.Lastname;

其中,日期时间字段使用的唯一地方是在WHERE子句中,和查询工作对同一DB精细与Windows 8客户端。 这两个客户端运行EINGLISH Windows版本。 另一个有趣的现象是,查询是从Microsoft SQL Management Studio中接受Windows 10的机器上。 但不是通过本机客户端。 在过滤器中使用的日期是在我们的程序通过GUI创建的。

具有Windows 10与本地客户端别人经验的奇怪的事情,或者有没有人有一个建议,这个问题怎么可能解决呢?

Answer 1:

我可以证实, 在这个线程旨意的解决方案解决了我的问题。

经过一番研究,我们发现ToString("yyyy-MM-dd HH:mm:ss")调用在Windows 7和Windows 10的反应不同,如果当前区域性设置为“无”或“NB-NO”在运行时( Thread.CurrentThread.CurrentCulture = new CultureInfo("no"); )。

所建议的修改的伎俩: ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) 这解决了我的问题,因为在时间格式化的点是其根本原因。

但是应该的ToString( “YYYY-MM-DD HH:MM:SS”)在这取决于操作系统相同的文化返回不同的格式? :O型这是一种可怕的。



文章来源: MSSQL query no longer works with Windows 10 client: The conversion of a varchar data type to a datetime data type resulted in an out-of-range value