Call Oracle stored procedures using devart dotConnect

Refresh

November 2018

Views

4.4k time

2

I'm new in Entity Framework and trying to call oracle stored procedures, but without success. So Here is my question:

How to call oracle stored procedures using devart dotConnect?

For example, I have stored procedure:

procedure get_problems(res out sys_refcursor) is
  begin

   open res 
   for
   select id, name
   from problems;  

  end;

And from C# I'm tying to call:

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

But it throws "EntityCommandExecutionException":

An error occurred while executing the command definition. See the inner exception for details.

Here is the inner exception:

ORA-06550: line 2, column 3:\nPLS-00306: wrong number or types of arguments in call to 'GET_PROBLEMS'\nORA-06550: line 2, column 3:\nPL/SQL: Statement ignored

I used

"typeof(byte[])"

as ObjectParameter type, because I saw this in Devart Entity Developer's generated code.

p.s. By the way, how will you recommend dotConnect in large projects?

2 answers

0

Я знаю, что это было предложено некоторое время назад, но это может помочь кому-то другому, как это мне потребовалось некоторое время, чтобы понять это. Вот как мы называем хранимую процедуру (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

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