![](/img/trans.png)
[英]Devart DotConnect got unexpected long decimal point for me while using entity framework 6 against Oracle
[英]Call Oracle stored procedures using 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行,第3列:\\ nPLS-00306:调用“ GET_PROBLEMS”时参数的数量或类型错误\\ nORA-06550:第2行,第3列:\\ nPL / SQL:语句被忽略
我用了
“ typeof(byte [])”
作为ObjectParameter类型,因为我在Devart Entity Developer的生成代码中看到了这一点。
ps顺便说一下,您如何在大型项目中推荐dotConnect?
我知道这个问题是在不久前被问到的,但它可能会帮助其他人,因为我花了一些时间才弄清楚这一点。 这是我们在包(P_SID)中调用存储的proc(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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.