Enterprise library 在EnterpriseLibrary 6.0 DAAB中带有Refcursor的ExecuteSporaccessor

Enterprise library 在EnterpriseLibrary 6.0 DAAB中带有Refcursor的ExecuteSporaccessor,enterprise-library,Enterprise Library,我正在使用VS2012,EnterpriseLibrary 6.0[DAAB]。我与数据库[Oracle]的连接良好 我有一个Oracle过程,它没有任何输入参数,只有输出参数,类型为RefCursor 我可以通过使用ExecuteReader和ExecuteDataset调用过程来获得输出 现在我正在尝试使用DatabaseExtension.ExecuteSprocAccessor。我得到一个错误,它表示参数类型无效 有谁能给我举一个使用ExecuteSpoaccessor的好例子吗 谢谢/

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

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

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

现在我正在尝试使用DatabaseExtension.ExecuteSprocAccessor。我得到一个错误,它表示参数类型无效

有谁能给我举一个使用ExecuteSpoaccessor的好例子吗

谢谢

//好消息//

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

因为在命令对象内部,参数集合不存在。为了解决这个问题,我们需要在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);
    }
//
///执行存储过程并返回可枚举的。
///此方法返回的可枚举项使用延迟加载返回结果。
/// 
///将由and函数解释为存储过程参数的值。
///可列举的数量。
公共重写IEnumerable执行(params对象[]参数值)
{
/*
使用(DbCommand=Database.GetStoredProcCommand(procedureName))
{
parameterMapper.AssignParameters(命令、参数值);
返回base.Execute(命令);
}
*/
DbCommand=Database.GetStoredProcCommand(procedureName);
parameterMapper.AssignParameters(命令、参数值);
返回base.Execute(命令);
}
我现在很高兴,找到了根本原因。它现在运转良好。产出像子弹一样来了

谢谢

//好消息//

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

因为在命令对象内部,参数集合不存在。为了解决这个问题,我们需要在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);
    }
//
///执行存储过程并返回可枚举的。
///此方法返回的可枚举项使用延迟加载返回结果。
/// 
///将由and函数解释为存储过程参数的值。
///可列举的数量。
公共重写IEnumerable执行(params对象[]参数值)
{
/*
使用(DbCommand=Database.GetStoredProcCommand(procedureName))
{
parameterMapper.AssignParameters(命令、参数值);
返回base.Execute(命令);
}
*/
DbCommand=Database.GetStoredProcCommand(procedureName);
parameterMapper.AssignParameters(命令、参数值);
返回base.Execute(命令);
}
我现在很高兴,找到了根本原因。它现在运转良好。产出像子弹一样来了


谢谢

您现在没有内存泄漏吗?好吧,不管怎样,在GC发生之前会一直存在的未处理对象?你现在没有内存泄漏吗?好吧,不管怎样,在GC发生之前会一直存在的未处理对象?