使用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 ?
看看我们博客上的这篇文章。
您可以通过我们的论坛或反馈页面与我们联系。
我知道这是一段时间前问的,但它可能会帮助别人,因为我花了一段时间才弄清楚。下面是我们如何调用包(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;
}