【发布时间】:2010-07-22 19:21:23
【问题描述】:
当前版本的 NHibernate (v2.1.2) 是否支持访问 Oracle 存储过程输出 REFCURSOR 除了输出参数?
我可以使用我的代码访问输出引用光标。但是我不确定我是否可以在同一个存储过程中访问额外的输出参数。
我们将不胜感激一些调用语法示例。谢谢。
【问题讨论】:
标签: oracle nhibernate stored-procedures output-parameter
当前版本的 NHibernate (v2.1.2) 是否支持访问 Oracle 存储过程输出 REFCURSOR 除了输出参数?
我可以使用我的代码访问输出引用光标。但是我不确定我是否可以在同一个存储过程中访问额外的输出参数。
我们将不胜感激一些调用语法示例。谢谢。
【问题讨论】:
标签: oracle nhibernate stored-procedures output-parameter
不,它没有。只支持一个 refcursor,它必须是 sproc 中的第一个参数。
您始终可以从会话中获取 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();
}
【讨论】: