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-сервере тоже настройки идентичны. Что я упустил?
  • Вопрос задан
  • 601 просмотр
Решения вопроса 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
Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
Ну, кроме того, что вы используете plain sql в коде в XXI веке, вместо того, чтобы использовать одну из замечательных ORM,

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

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

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

Войти через центр авторизации
Похожие вопросы