【问题标题】:EntLib 6 and ODP.NET - Accessor loses parametersEntLib 6 和 ODP.NET - 访问器丢失参数
【发布时间】:2017-01-13 01:16:04
【问题描述】:

我确信我不会是第一个尝试使用 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);

有没有人能够完成这项工作?提前致谢。

【问题讨论】:

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


    【解决方案1】:

    嗯,它现在可以工作了。事实上,答案一直都在那里。我所要做的就是使用 EntLibContrib 库提供的类,瞧!

    如果有人读到这个,只需看看EntLibContrib.Data.OdpNet.OracleDatabase 类中的CreateOracleSprocAccessor() 方法。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2022-11-08
      • 2013-11-28
      • 2015-02-02
      相关资源
      最近更新 更多