Критерии формата даты и времени NHibernate - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть простой запрос критерия nHibernate, который ищет записи с датой и временем меньше, чем сегодня:

example:

criteria.Add(Expression.Le("TheDate", DateTime.Today));

Однако полученные результаты неверны, когда день / месяц неоднозначны (например, 12 ноября 2009 г. возвращает записи за 11 декабря 2009 г.)

Я посмотрел на сгенерированный SQL, и формат даты и времени покажет 12/11/2009, и если я выполню запрос sql непосредственно в SQL Manager, он вернет только правильные результаты с форматом даты 12.12.2009.

Есть ли способ определения формата даты SQL из выражения критерия или мне нужно что-то сделать с таблицей базы данных?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

Большое спасибо за ваш ответ, я подумал, что это может быть что-то вроде настроек местоположения.

На самом деле я обошел проблему с помощью HQL, но я буду помнить об этом.

0 голосов
/ 13 ноября 2009

В NHibenrate нет специальных настроек для форматов даты и локалей. Вопрос с БД. В моей системе и без каких-либо особых настроек я получаю даты из моих запросов NHibernate как @ p2 = '2009-11-13 12: 48: 22: 000'. Это в гггг-мм-дд, и я не посылаю таким образом даты из своего кода, и я не даю указание NHibernate сделать это явно.

Это происходит в БД и связано с языком по умолчанию экземпляра SQL Server и / или языковой настройкой учетной записи пользователя, которую использует соединение БД NHibenrate. Я полагаю, что это также может быть связано с настройками формата даты операционной системы в сочетании с языком по умолчанию экземпляра SQL Server.

В SQL Server Management Studio можно щелкнуть правой кнопкой мыши экземпляр, чтобы изменить / исправить язык на вкладке «Дополнительные параметры» в диалоговом окне «Свойства». Вам также придется перейти и изменить / исправить язык по умолчанию, который используется для учетной записи пользователя, которую использует NHibernate (получить его из строки подключения). В вашем экземпляре сервера разверните Security-> Logins и щелкните правой кнопкой мыши на правильном имени входа, чтобы открыть диалоговое окно Properties. На вкладке «Общие» есть настройка «Язык по умолчанию», которую вы можете установить.

У меня была эта проблема раньше, и установка языков в SQL Server как «британский английский» решила проблему (я нахожусь в Великобритании). Возможно, ваш случай похож на тот, который я решил таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...