Вызовите хранимые процедуры Oracle, используя devart dotConnect - PullRequest
2 голосов
/ 15 апреля 2011

Я новичок в Entity Framework и пытаюсь вызвать хранимые процедуры оракула, но безуспешно.Итак, вот мой вопрос:

Как вызвать хранимые процедуры Oracle с помощью devart dotConnect?

Например, у меня есть хранимая процедура:

procedure get_problems(res out sys_refcursor) is
  begin

   open res 
   for
   select id, name
   from problems;  

  end;

И из C # I 'связываю с вызовом:

 using (Entities entities = new Entities())
 {
     ObjectParameter res = new ObjectParameter("res", typeof(byte[]));
     ObjectResult<PROBLEM> problems = entities.SelectAllProblems(res);
 }

Но выдается «EntityCommandExecutionException»:

Произошла ошибка при выполнении определения команды.Подробности см. Во внутреннем исключении.

Вот внутреннее исключение:

ORA-06550: строка 2, столбец 3: \ nPLS-00306: неправильный номер или типыаргументов в вызове 'GET_PROBLEMS' \ nORA-06550: строка 2, столбец 3: \ nPL / SQL: оператор игнорируется

Я использовал

"typeof (байт[]) "

как тип ObjectParameter, потому что я видел это в сгенерированном коде Devart Entity Developer.

ps Кстати, как вы будете рекомендовать dotConnect в больших проектах?

Ответы [ 2 ]

0 голосов
/ 23 мая 2012

Я знаю, что это спросили некоторое время назад, но это могло бы помочь кому-то еще, так как мне потребовалось некоторое время, чтобы понять это. Вот как мы вызываем хранимый процесс (SID_PGet) внутри пакета (P_SID) и возвращаем одно строковое значение, используя DotConnect. (Это возвращает только одно значение - в настоящее время я пытаюсь выяснить, как вернуть sys_refcursor).

Вот хранимый процесс:

PROCEDURE SID_PGet(io_SID OUT varchar2) is
Begin
   io_SID:=GetSID; -- GetSID returns a unique varchar value
End;

А в DbContext в C #:

public string GetNextSId()
{
    var parameter = new Devart.Data.Oracle.OracleParameter("io_SID", Devart.Data.Oracle.OracleDbType.VarChar, ParameterDirection.Output);
    this.Database.ExecuteSqlCommand("BEGIN P_SID.SID_PGet(:io_SID); END;", parameter);
    var sid = parameter.Value as string;

    return sid;
}
0 голосов
/ 15 апреля 2011

Посмотрите эту статью в нашем блоге.
Вы можете связаться с нами, используя наши Форумы или Страница обратной связи .

...