简体   繁体   English

EntLib 6和ODP.NET-访问器丢失参数

[英]EntLib 6 and ODP.NET - Accessor loses parameters

I'm sure I can't be the first one trying to use EntLib 6's Accessors to execute an Oracle SP with parameters. 我敢肯定我不是第一个尝试使用EntLib 6的访问器来执行带参数的Oracle SP的人。 It all worked fine and dandy when I was using the (deprecated) OracleClient from MS, but when I switched to Oracle's own ODP.NET (using EntLibContrib 6) I started getting the infamous "wrong number or types of arguments in call to 'TEST_PROCEDURE'" . 当我使用MS上(已弃用的)OracleClient时,一切正常且繁琐,但是当我切换到Oracle自己的ODP.NET(使用EntLibContrib 6)时,我开始收到臭名昭著的“错误数量或类型的参数来调用'TEST_PROCEDURE '”

Here's my code: 这是我的代码:

Main 主要

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 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);
        }
    }
}

This mapper gets invoked, and I can see the parameters being correctly added to the collection, but then for some misterious reason they seem to disappear when the call to Execute is made. 调用了此映射器,我可以看到参数已正确添加到集合中,但是由于一些不明智的原因,在调用Execute时它们似乎消失了。

Stored Procedure 储存程序

PROCEDURE TEST_PROCEDURE (param1  IN VARCHAR2, param2  IN OUT SYS_REFCURSOR);

Has anyone been able to make this work? 有人能做这项工作吗? Thanks in advance. 提前致谢。

Well, it's working now. 好吧,现在正在工作。 In fact the answer was right there this whole time. 实际上,答案一直都在那儿。 All I had to do was to use the classes provided by the EntLibContrib library and voila! 我要做的就是使用EntLibContrib库提供的类,瞧!

In case anyone reads this, just take a look at the CreateOracleSprocAccessor() method in the EntLibContrib.Data.OdpNet.OracleDatabase class. 万一有人EntLibContrib.Data.OdpNet.OracleDatabase这本书,只需看看EntLibContrib.Data.OdpNet.OracleDatabase类中的CreateOracleSprocAccessor()方法。 Cheers! 干杯!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM