Я думаю, что вы можете преследовать не ту проблему.
Я бы сначала проверил:
- Ваша LINQ to SQL модель схемы / базы данных точна.
- Ваша логика проблемы, чтобы убедиться, что новое значение DateTime не может быть вне диапазона.В частности, убедитесь, что это не может быть
DateTime.MinValue
или DateTime.MaxValue
. - Что вы не выполняете никакой разбор строк в вашем приложении.
- Что делает SQL Serverне иметь никаких триггеров (особенно вместо триггеров, которые могли бы изменять оператор обновления).
Я предполагаю, что вы (или ваш клиент) начинаете с получения переполнения SqlTypeException - SqlDateTime.Должно быть между 01.01.1753 12:00:00 и 31.12.9999 11:59:59 PM 'сообщение об ошибке, и после расследования вы заметили разницу в способе отображения дат.
Вы не упоминаете, откуда поступает информация, поэтому я предполагаю что-то вроде профилировщика SQL.
Однако проблема с отображением даты может быть из-за красной селедки, поскольку это не должно быть проблемой.
с SQL Server 2005, наши даты превращаются в: 4 ноября 2011 02:15:25 PM
с SQL Server 2008, наши даты превращаются в: 2011-11-04 02:15:25 PM
Я не совсем уверен, что вы подразумеваете под этим.SQL не 'превращает' даты в строку, поскольку он не хранит даты в виде строк, но внутренним представлением является число (что-то вроде количества дней с 1 января 1900 года).
Если вы имеете в виду, что ваши даты отображаются как 4 ноября 2011 г. 02:15:25 PM, то это зависит от программы, которая отображает информацию.
Кроме того, насколько я понимаю, еслиВы используете параметр DateTime (который LINQ to SQL должен делать, если модель базы данных точна), тогда информация, отправляемая с клиента на SQL Server, является числовым представлением SQL DateTime.Это должно избежать любых проблем преобразования даты и времени между клиентом и сервером.Когда вы смотрите, например, на SQL Profiler, он не показывает числовое представление даты, которое будет очень мало значить для большинства людей, но пытается быть полезным и отображает значение в виде строки.
Важным моментом является то, что если SQL или профилировщику SQL удается отобразить параметр datetime как «4 ноября 2011 г. 02:15:25 PM», то он знает, что это действительная дата, и точно знает, какая это дата.
Так что я подозреваю, что проблема с форматом отображения, вероятно, не имеет значения.
Таким образом, возникает вопрос, почему ваш клиент получает сообщение об ошибке переполнения SqlTypeException - SqlDateTime.
Первоедля этого нужно проверить, какое значение даты вы устанавливаете, что необходимо сделать на уровне приложения, а не на сервере SQL Server, так как это не зашло бы так далеко.(Это еще одна причина, почему я не думаю, что это проблема конфигурации SQL.)
кажется, что .NET не может действительно интерпретировать это 4 ноября 2011 02:15:25 PM как действительный DateTimeпо какой-то причине
Я не вижу, где .NET будет даже , пытаясь интерпретировать строки как дату, если у вас нет команд DateTime.Parse
иесли это так, то проблема не имеет ничего общего ни с LINQ, ни с SQL.