Ответ 1
Я думаю, вы можете преследовать неправильную проблему.
Сначала я должен проверить:
- Точная схема LINQ SQL/модель базы данных верна.
- Ваша логика проблемы, чтобы убедиться, что новое значение DateTime не может быть вне диапазона. В частности, убедитесь, что он не может быть
DateTime.MinValue
илиDateTime.MaxValue
. - Что вы не выполняете синтаксический анализ строк до даты в своем приложении.
- Что сервер SQL не имеет никаких триггеров (особенно вместо триггеры, которые могут модифицировать инструкцию обновления).
Я угадываю вас (или вашего клиента), начиная с переполнения SqlTypeException - SqlDateTime. Должно быть от 1/1/1753 12:00:00 AM и 12/31/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 не содержит 'turn' в строке, поскольку он не хранит даты как строки, но внутреннее представление - это число (что-то вроде количества дней с 1 января 1900 года).
Если вы имеете в виду, что ваши даты получают отображаемые как 4 ноября 2011 года 02:15:25, то это зависит от программы, которая отображает информацию.
Кроме того, как я понимаю, если вы используете параметр DateTime (который LINQ должен иметь 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.