NHibernate访问Oracle存储过程REFCURSOR和输出参数

NHibernate访问Oracle存储过程REFCURSOR和输出参数,oracle,nhibernate,stored-procedures,output-parameter,Oracle,Nhibernate,Stored Procedures,Output Parameter,当前版本的NHibernate(v2.1.2)是否支持除输出参数外访问Oracle存储过程输出REFCURSOR 我可以用我的代码很好地访问输出refcursor。但是,我不确定是否可以在同一存储过程中访问额外的输出参数 如能提供一些调用语法示例,将不胜感激。谢谢。没有。只支持一个refcursor,并且它必须是存储过程中的第一个参数 您总是可以从会话中获取IDbConnection,然后在这种情况下使用普通的ODP.Net(您将失去nh功能),或者更确切地说是更改存储过程。我找到了一种使用NH

当前版本的NHibernate(v2.1.2)是否支持除输出参数外访问Oracle存储过程输出REFCURSOR

我可以用我的代码很好地访问输出refcursor。但是,我不确定是否可以在同一存储过程中访问额外的输出参数


如能提供一些调用语法示例,将不胜感激。谢谢。

没有。只支持一个refcursor,并且它必须是存储过程中的第一个参数


您总是可以从会话中获取IDbConnection,然后在这种情况下使用普通的ODP.Net(您将失去nh功能),或者更确切地说是更改存储过程。

我找到了一种使用NHibernate调用旧存储过程的解决方案

我不认为这是更好的方法,但我们通常没有时间重构所有内容,因此:

using (ITransaction transaction = _session.BeginTransaction()) {
    IDbCommand command = new OracleCommand();
    command.Connection = _session.Connection;

    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "pk_package.pr_procedure";

    // Set input parameters
    var param1 = new OracleParameter("@param1", OracleDbType.Decimal) {Value = someField};
    var param2 = new OracleParameter("@param2", OracleDbType.Decimal) {Value = 1};

    command.Parameters.Add(param1);
    command.Parameters.Add(param2);

    // Execute the stored procedure
    command.ExecuteNonQuery();
    transaction.Commit();
}