region23
@region23
веб-разработчик

Как отловить ошибку приведения даты в C#?

Есть 2 компьютера: dev и сервер.
На машине разработчика запрос обрабатывается нормально, а на сервере вылетает исключение:
System.Data.SqlClient.SqlException: Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.


Вот запрос:
SELECT COUNT(*) FROM view_Request 
WHERE ( ( Executor.exist('(/Items/Item[@id="paco"])[1]') = 1) 
AND  ( StatusName = 'в работе' OR StatusName = 'не рассмотрена' OR StatusName = 'обязательно сегодня') 
AND  ( Created >= '2015-10-19' AND Created <= '2015-10-26'))


Что интересно, если выполняю этот запрос в MS SQL Management Studio, все нормально отрабатывает и на dev и на сервере. А вот в коде на 3-й строке вылетает exception:
var da = new SqlDataAdapter(sqlQuery, con);
var dt = new DataTable();
da.Fill(dt);


Куда смотреть, что править? Смотрел конфигурацию IIS - локаль стоит одинаковая. В SQL-сервере тоже настройки идентичны. Что я упустил?
  • Вопрос задан
  • 613 просмотров
Решения вопроса 1
@Beltoev
Живу в своё удовольствие
Не пробовали дату в стандартном формате писать? Как бы всегда избавляет от проблем такого рода
Created >= '19.10.2015 0:00:00' AND Created <= '26.10.2015 0:00:00'

UPD:
Для тех, кто в подобной ситуации, но не дошёл до комментариев:
TRY_PARSE('26/10/2015 00:00:00' AS DATETIME USING 'ru-ru')
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
GavriKos
@GavriKos
Формат даты зависит от региональных настроек конкретной машины.
Ответ написан
@mletov
И еще в Web.Config просмотрите, добавьте строку что-то типа такой (значение culture выберите сами), у меня такое было, когда на локалке стояла русская винда, на сервере английская. Причем изменение языковых настроек самой машины не помогали, а изменение Web.config сработало.

<globalization uiCulture="ru" culture="ru-RU" />
Ответ написан
Комментировать
@heartdevil
плыву как воздушный шарик
Привет.

Думаю, такое может быть если формат даты неверный.
Ответ написан
@kttotto
пофиг на чем писать
Все дело в формате даты. При ее написании нужно учитывать культуру, где вы ее читать будете.
Ответ написан
Комментировать
@i_light
Backend, XAML, crossplatform
Ну, кроме того, что вы используете plain sql в коде в XXI веке, вместо того, чтобы использовать одну из замечательных ORM,

вы забыли, что в таких операциях полезно в начало скрипта вставить SET DATEFORMAT

Однако, я всё ещё настойчиво рекомендую использовать ORM. Entity Framework, NHibernate, или любой другой на ваш вкус.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы