使用devart dotConnect调用Oracle存储过程

本文关键字:Oracle 存储过程 调用 dotConnect devart 使用 | 更新日期: 2023-09-27 17:50:20

我是新的实体框架,并试图调用oracle存储过程,但没有成功。我的问题是:

如何使用devart dotConnect调用oracle存储过程?

例如,我的存储过程:
procedure get_problems(res out sys_refcursor) is
  begin
   open res 
   for
   select id, name
   from problems;  
  end;

在c#中,我要调用:

 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: Statement ignored

我用

" typeof (byte [])"

作为ObjectParameter类型,因为我在Devart Entity Developer生成的代码中看到了这一点。

注。顺便问一下,你如何在大型项目中推荐dotConnect ?

使用devart dotConnect调用Oracle存储过程

看看我们博客上的这篇文章。
您可以通过我们的论坛或反馈页面与我们联系。

我知道这是一段时间前问的,但它可能会帮助别人,因为我花了一段时间才弄清楚。下面是我们如何调用包(P_SID)中的存储过程(SID_PGet)并使用DotConnect返回单个字符串值。(这只返回一个值-我目前正试图找出如何返回一个sys_refcursor)。

下面是存储过程:

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

在c#的DbContext中:

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;
}