0

Мы долгое время использовали следующий SQL-запрос в программе WinForms без каких-либо проблем, до тех пор, пока некоторые конечные пользователи не будут обновлены до Windows 10.Запрос MSSQL больше не работает с клиентом Windows 10: преобразование типа данных varchar в тип данных datetime привело к значению вне диапазона

Они неожиданно получают исключение: «ОШИБКА [22007] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Преобразование типа данных varchar в тип данных datetime привел к значению вне диапазона. "

Эта ошибка была опубликована здесь ранее, но я не нашел сообщений, связанных с обновлением Windows 10.

Запрос направлен на SQL Server 2012, используя Native Client 11. Он работает на окнах 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; 

Единственное место, где используются DateTime полей в предложении Where, и запрос отлично работает с той же БД с клиентом Windows 8. Оба клиента запускают версии Einglish Windows. Еще одно интересное замечание заключается в том, что запрос принимается из Microsoft SQL Management Studio на компьютере под управлением Windows 10. Но не через родной клиент. Даты, используемые в фильтре, создаются в нашей программе через графический интерфейс.

Есть ли у кого-то другие странные вещи с собственным клиентом в Windows 10, или у кого-нибудь есть предложение, как эта проблема может быть решена?

+0

Другая датаформат 'SET DATEFORMAT ' – lad2025

+0

Вы уверены, что английская версия Windows имеет один и тот же язык, например, 'US' vs' EN' и date 'yyyy/dd/mm' vs' yyyy/mm/dd'? – lad2025

+0

Я не проверял для US - EN, но изменение этого не изменило поведения. Исследование вашего первого комментария, Lad2025, я заметил, что это временная часть DateTime, которая вызывает проблемы. В нашем коде мы отформатируем это с помощью команды ToString («yyyy-MM-dd HH: mm: ss»). Который почему-то был изменен на «yyyy-MM-dd HH.mm.ss» на машине Windows 10. Я постараюсь ответить @ JonSkeet на следующее сообщение в качестве решения tomorow и опубликовать послесловие обновления: http://stackoverflow.com/questions/18874102/net-datetime-tostringmm-dd-yyyy-hhmmss-fff-resulted -в-что-то типа –

ответ

1

Я подтверждаю, что the solution purposed in this thread решил мою проблему.

После некоторого исследования мы обнаружили, что вызов ToString("yyyy-MM-dd HH:mm:ss") ответил по-разному в Windows 7 и Windows 10, если текущая культура была установлена ​​на «no» или «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 Это отчасти страшно.