我确信我不能成为第一个尝试使用 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);
有没有人能够完成这项工作?提前致谢。