EntLib 6和ODP.NET - Accessor丢失参数

时间:2016-09-05 16:22:04

标签: c# oracle enterprise-library odp.net daab

我确信我不能成为第一个尝试使用EntLib 6的Accessors来执行带参数的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);

有没有人能够做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:0)

嗯,它现在正在运作。事实上,答案就在那里。我所要做的就是使用 EntLibContrib 库提供的类,瞧!

如果有人阅读此内容,请查看CreateOracleSprocAccessor()课程中的EntLibContrib.Data.OdpNet.OracleDatabase方法。干杯!