2014-02-21 2 views
0

Я использую версию 3.8.5.0 ServiceStack.ormLite.dll.Каков формат dateTime.Now в вызове ExecuteSQL ORMLite?

Мы используем сервер postgreSql. Наш сервер postgreSQL имеет локаль, установленную в en-GB (в postgres.conf мы установили параметр dateStyle в «ISO, DMY»).

В нашем веб-приложения, когда мы переходим необработанного заявление SQL как:

var insertSql = string.Format("insert into ReportTable values (
            '{0}', '{1}',)", 
              message.Id, DateTime.Now); 

и использовать ExecuteSQL (InsertSQL), я получаю финиковой диапазон от даты в Postgres, как дата в MDY а база данных ожидает DMY.

Однако, если я:

var insertSql = string.Format("insert into ReportTable values (
            '{0}', 'now',)", 
              message.Id); 

вставка работает.

Я знаю, что я мог бы установить

<globalization Culture="en-GB"/> 

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

Любые идеи, если есть какой-либо другой способ, я могу решить эту проблему в библиотеке ormLite?

+2

Почему вы хотите передать необработанный SQL вообще, вместо использования параметризованного SQL? В этот момент вам не нужно беспокоиться об атаках конверсии * или * SQL. –

+0

Спасибо, Джон. Я знал, что проблема с конверсией устранена с помощью параметризованного SQL, но даже не думала о SQL-инъекции. Я изменю свой код, чтобы удовлетворить это. Благодарю. –

ответ

1

Вы должны форматировать DateTime.Now способ postgreSQL (или любой РСУБД, если на то пошло) ожидает этого.

var insertSql = string.Format("insert into ReportTable values (
           '{0}', '{1:your format here}',)", 
             message.Id, DateTime.Now); 

Например, если ваша РСУБД ожидает даты в формате день-месяц-год, то вам нужно передать это:

var insertSql = string.Format("insert into ReportTable values (
           '{0}', '{1:dd-MM-yyyy}',)", 
             message.Id, DateTime.Now); 

Конечно, вы можете также использовать объекты параметров, как предложил Джон Скит , хотя может быть причина, по которой вы специально хотите использовать string.

+2

Pg предпочтет даты ISO, ГГГГ-ММ-ДД. Таким образом, большинство БД. –

+1

Да, но OP сказал, что он специально настроил конфигурацию на DMY, поэтому я решил, что мой ответ должен учитывать это. ;) – Crono

+2

Несомненно. Просто отметив, что Pg всегда будет принимать дату ISO. –

Смежные вопросы