У нас действительно странное и непоследовательное поведение с Linq-to-SQL здесь.Linq-to-SQL и weptness DateTime
Наше приложение установлено на нескольких сайтах клиентов, и оно отлично работает по большей части. Один из запросов в Linq-to-SQL обновляет таблицу и устанавливает столбец DateTime
в новое значение.
Во всех случаях - в том числе наших систем разработки и тестирования - это утверждение Linq к SQL переводится в то вдоль линий:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = '2011-11-04 14:15:25', @ID = 555
Однако, на сайте одного клиента, по причинам, которые Арен «т ясно нам (пока), это обновление переводится в:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = 'Nov 4 2011 02:15:25PM', @ID = 555
и по какой-то причине, то не будет работать на SQL Server 2005.
Теперь на серверах этого клиента (веб-сервере и SQL Server) установлены англо-английские версии Windows Server 2008; язык в SQL Server установлен на us_english
, формат даты установлен на mdy
, учетная запись пользователя, на которой установлено обновление, имеет свой язык, установленный на English
в SQL Server ..... и эта настройка одинакова в другом месте (например, на наша тестовая серверная инфраструктура).
Так что мой вопрос на самом деле:
Почему на земле делает Linq к SQL вдруг создать совершенно другое представление того же
DateTime
отправить в SQL Server? Есть ли ручка для управления этим?И почему ADO.NET и база данных SQL Server 2005 с пакетом обновления 2 (SP2) не обрабатывают этот оператор
UPDATE
правильно? Мы получаем ошибку в нашем журнале, который читает:
SqlTypeException - переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.
Это, кажется, ошибка .NET (более чем ошибка SQL Server), и кажется, что .NET не может реально интерпретировать этот Nov 4 2011 02:15:25PM
как действительный DateTime
по какой-то причине. При попытке запустить сгенерированный оператор UPDATE в SQL Server Management Studio, мы не можем, кажется, «сила», что ошибка произойдет - UPDATE
счастливо работает нормально .....
Update: некоторое дальнейшее исследование, кажется, указывает Linq- к SQL ведет себя по-разному при переходе от SQL Server 2005 или 2008
- с SQL Server 2005 , наши даты заводятся в:
Nov 4 2011 02:15:25PM
- с SQL Server 2008 , наши даты превращаются в:
2011-11-04 02:15:25PM
Проверьте настройки CurrentCulture для приложений C#/VB.NET. –
@BogdanSahlean: 'CurrentCulture' установлен в' InvariantCulture' на всех системах –
Я согласен, что это проблема .NET, а не SQL. Вероятно, ошибка в LINQ2SQL забывает использовать инвариантную культуру где-то. Соответствуют ли настройки местоположения Windows? – leppie