我正在使用VS2012,EnterpriseLibrary 6.0 [DAAB]。我与数据库[Oracle]的连接很好。
我有一个Oracle程序,它没有任何输入参数,只有输出参数存在,它是RefCursor类型。
我可以通过使用Execute Reader和ExecuteDataset调用该过程来获取输出。
现在我正在尝试使用DatabaseExtension.ExecuteSprocAccessor。我收到错误,说错误的参数类型。
任何人都可以为我提供使用ExecuteSprocAccessor的好例子。
由于
答案 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);
}
我现在非常高兴,找到根本原因。现在工作正常。输出就像一颗子弹。
由于