Какой формат Oracle ожидает для дат? - PullRequest
1 голос
/ 15 марта 2012

С помощью следующего кода C # (используя dotConnect devArt для компонентов Oracle):

OracleParameter pRes = new OracleParameter("C_REF", OracleDbType.Cursor);
pRes.Direction = ParameterDirection.ReturnValue;

oracleCommand1.Parameters.Clear();
oracleCommand1.Parameters.Add("iStartDate", "01-jan-2011");
oracleCommand1.Parameters.Add("iEndDate", "21-jan-2011");
oracleCommand1.Parameters.Add("iCATEGORYID", 114);
oracleCommand1.Parameters.Add(pRes);
oracleConnection1.Open();
oracleCommand1.ExecuteCursor();

... Я получаю:

Devart.Data.Oracle.OracleException не обработано Сообщение = ORA-06550: строка 2, столбец 13: PLS-00306: неверный номер или типы аргументов при вызове 'CONN_THRU_DOTNET' ORA-06550

Параметры (скопированы из хранимой процедуры):

 iStartDate IN DATE
, iEndDate IN DATE
, iCATEGORYID IN NUMBER
, C_REF IN OUT SYS_REFCURSOR

Я предполагаю, что значения даты вызывают проблему. Что я тут не так делаю?

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Вы должны использовать DateTime, а не string вообще.Это одна из точек использования параметризованных запросов.

oracleCommand1.Parameters.Add("iStartDate", new DateTime(2011, 1, 1));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(2011, 1, 21));
0 голосов
/ 28 марта 2012

Я понимаю, что немного опоздал на вечеринку, но еще одна интересная нота ...

Если вы создаете экземпляр OracleCommand из набора инструментов (как компонент) и вводите CommandText (через конструктор), я обнаружил, что он не присваивает ваши типы данных параметрам. После того, как он предложит автоматически сгенерировать параметры, если вы войдете, я думаю, вы увидите, что они все VarChar.

Если вы измените их на DateTime, все должно работать идеально, как отмечено выше. Если вы этого не сделаете, это, вероятно, все еще будет работать, если вы предоставите правильный формат. Но не делай этого.

0 голосов
/ 15 марта 2012

В дополнение к ответу Джона Скита, если вы не используете параметризованные запросы, Oracle ожидает даты в формате 'YYYY-MM-DD'.

...