[英]Execute Oracle stored procedure from .net application
我试图从我的.net应用程序执行存储过程,但我收到一个错误
ORA-00900:无效的SQL语句“
有什么建议吗?
await Context.Database.SqlQuery<Equipment>(_execPackage, new OracleParameter("ID", obID),
new OracleParameter("Time", time),
new OracleParameter("rNo", No).ToListAsync();
private readonly string _execPackage = $@" EXEC procedurename(:ID,:Time,:rNo)";
这是有效的
await Context.Database.SqlQuery<object>($@" CALL procedurename(:p1,:p2,:p3)",
new OracleParameter("p1", obID),
new OracleParameter("p2", time),
new OracleParameter("p3", Nmbr).ToListAsync();
这可能看起来很冗长,但这是我更喜欢设置对存储过程的调用的方式:
using (var context = new DbContext()) // you don't have to strictly use this to reference the context, it's just what i gravitate towards
{
var in_Id = new OracleParameter("in_ID", OracleDbType.TYPE, obID, ParameterDirection.Input);
var in_time = new OracleParameter("in_time", OracleDbType.TYPE, time, ParameterDirection.Input);
var in_rNo = new OracleParameter("in_rNo", OracleDbType.TYPE, No, ParameterDirection.Input);
await context.Database.SqlQuery<object>("BEGIN procedurename(:in_Id, :in_time, :in_rNo); END;", in_Id, in_time, in_rNo).ToListAsync();
}
有一点需要注意,如果ID参数是带有自动生成其值的序列的PK,您将需要引用序列而不是传入参数:
context.Database.SqlQuery<object>("BEGIN procedurename(SEQUENCE_NAME.nextval, :in_time, :in_rNo); END;", in_Id, in_time, in_rNo);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.