使用devart dotConnect调用Oracle存储过程

时间:2011-04-15 08:16:30

标签: c# entity-framework devart dotconnect

我是Entity Framework的新手并尝试调用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行,第2列   3:\ nPLS-00306:错误的数字或类型   呼吁中的参数   'GET_PROBLEMS'\ nORA-06550:第2行,   第3列:\ nPL / SQL:忽略语句

我用过

  

“的typeof(字节[])”

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

P.S。顺便问一下,您如何在大型项目中推荐dotConnect?

2 个答案:

答案 0 :(得分:0)

在我们的博客中查看this article 您可以使用我们的ForumsFeedback Page与我们联系。

答案 1 :(得分:0)

我知道这是在不久之前被问过的,但它可能对其他人有所帮助,因为我花了一段时间来弄明白这一点。以下是我们如何在包(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;
}