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

发布于 2024-09-11 08:34:17 字数 172 浏览 8 评论 0原文

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

我可以使用我的代码很好地访问输出引用游标。但是我不确定我可以在同一存储过程中访问附加输出参数。

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

Does the current version of NHibernate (v2.1.2) support access Oracle stored procedure output REFCURSOR in addition to an output parameter?

I can access the output refcursor fine with my code. However i'm not sure i can access the additional output param in the same stored procedure.

Some sample of calling syntax would be greatly appreciated. thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱桃奶球 2024-09-18 08:34:17

不,事实并非如此。仅支持一个引用游标,并且它必须是存储过程中的第一个参数。

您始终可以从会话中获取 IDbConnection,然后在此类场景中使用普通的 ODP.Net(您会失去 nh 功能),或者更确切地说更改存储过程。

Nope it does not. Only one refcursor is supported and it has to be the first parameter in the sproc.

You can always get the IDbConnection from the session and then use plain ODP.Net for such scenarios (you lose nh functionality) or rather change the stored procedure.

思念绕指尖 2024-09-18 08:34:17

我找到了一个使用 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();
}

I found a solution to call old stored procedures with NHibernate.

I don't think that is the better way, but we normally don't have time to refactor everything, so:

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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文