2010-07-22 259 views
0

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

我可以用我的代码访问输出refcursor罚款。但是我不知道我可以在同一个存储过程中访问额外的输出参数。

调用语法的一些示例将不胜感激。谢谢。

回答

1

不,它不。只支持一个refcursor,它必须是sproc中的第一个参数。

您可以始终从会话中获取IDbConnection,然后使用纯ODP.Net处理此类情况(您失去了nh功能),或者更改存储过程。

0

我发现了一个解决方案,用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(); 
}