EnterpriseLibrary 6.0 DAAB中带有Refcursor的ExecuteSprocAccessor

时间:2013-06-25 15:48:19

标签: enterprise-library

我正在使用VS2012,EnterpriseLibrary 6.0 [DAAB]。我与数据库[Oracle]的连接很好。

我有一个Oracle程序,它没有任何输入参数,只有输出参数存在,它是RefCursor类型。

我可以通过使用Execute Reader和ExecuteDataset调用该过程来获取输出。

现在我正在尝试使用DatabaseExtension.ExecuteSprocAccessor。我收到错误,说错误的参数类型。

任何人都可以为我提供使用ExecuteSprocAccessor的好例子。

由于

1 个答案:

答案 0 :(得分:1)

//好消息//

我找到了问题的根本原因,它位于Enterprise No要点的CommandAccessor.cs类的Enterprise Library 6.0,DataBlock源代码中。 66.

因为在命令对象内部,参数集合不存在。要解决这个问题,我们需要在SprocAccessor.cs中执行以下操作,[方法在第97行]

在下面的方法中,命令对象位于using语句中。因此,当命令超出using子句的范围时,命令将丢失它是参数集合值。所以,我已经删除了使用条款,它工作正常。

/// <summary>
    /// Executes the stored procedure and returns an enumerable of <typeparamref name="TResult"/>.
    /// The enumerable returned by this method uses deferred loading to return the results.
    /// </summary>
    /// <param name="parameterValues">Values that will be interpret by an <see cref="IParameterMapper"/> and function as parameters to the stored procedure.</param>
    /// <returns>An enumerable of <typeparamref name="TResult"/>.</returns>
    public override IEnumerable<TResult> Execute(params object[] parameterValues)
    {
        /*
        using (DbCommand command = Database.GetStoredProcCommand(procedureName))
        {
            parameterMapper.AssignParameters(command, parameterValues);
            return base.Execute(command);
        }
        */
        DbCommand command = Database.GetStoredProcCommand(procedureName);
        parameterMapper.AssignParameters(command, parameterValues);
        return base.Execute(command);
    }

我现在非常高兴,找到根本原因。现在工作正常。输出就像一颗子弹。

由于