1

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

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

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

现在我正在尝试使用 DatabaseExtension.ExecuteSprocAccessor。我收到错误消息,表示参数类型无效。

任何人都可以为我提供一个使用 ExecuteSprocAccessor 的好例子吗?

谢谢

4

1 回答 1

1

//好消息 //

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

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

在下面的方法中,命令对象位于 using 语句中。因此,当命令超出 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);
    }

我现在很高兴,找到了根本原因。现在工作正常。输出像子弹一样来了。

谢谢

于 2013-07-02T16:23:08.620 回答