[英]EntLib 6 and ODP.NET - Accessor loses parameters
我敢肯定我不是第一个尝试使用EntLib 6的访问器来执行带参数的Oracle SP的人。 当我使用MS上(已弃用的)OracleClient时,一切正常且繁琐,但是当我切换到Oracle自己的ODP.NET(使用EntLibContrib 6)时,我开始收到臭名昭著的“错误数量或类型的参数来调用'TEST_PROCEDURE '” 。
这是我的代码:
主要
var query = "TEST_PROCEDURE";
var accessor = _db.CreateSprocAccessor(
query,
new OracleParamMapper(),
new ColumnMapper<MyEntity>().Map()
);
var p1 = new OracleParameter("param1", OracleDbType.Varchar2, 1);
p1.Direction = ParameterDirection.Input;
p1.Value = "T";
var p2 = new OracleParameter("param2", OracleDbType.RefCursor);
p2.Direction = ParameterDirection.Output;
return accessor.Execute(p1, p2);
OracleParamMapper
public class OracleParamMapper : IParameterMapper
{
public void AssignParameters(DbCommand command, object[] parameterValues)
{
((OracleCommand)command).BindByName = true;
foreach (var item in parameterValues)
{
command.Parameters.Add(item);
}
}
}
调用了此映射器,我可以看到参数已正确添加到集合中,但是由于一些不明智的原因,在调用Execute时它们似乎消失了。
储存程序
PROCEDURE TEST_PROCEDURE (param1 IN VARCHAR2, param2 IN OUT SYS_REFCURSOR);
有人能做这项工作吗? 提前致谢。
好吧,现在正在工作。 实际上,答案一直都在那儿。 我要做的就是使用EntLibContrib库提供的类,瞧!
万一有人EntLibContrib.Data.OdpNet.OracleDatabase
这本书,只需看看EntLibContrib.Data.OdpNet.OracleDatabase
类中的CreateOracleSprocAccessor()
方法。 干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.