我是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?
答案 0 :(得分:0)
在我们的博客中查看this article 您可以使用我们的Forums或Feedback 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;
}