如何使用 NHibernate 以编程方式调用 Oracle 存储过程?

发布于 2024-10-16 13:20:32 字数 192 浏览 1 评论 0原文

(如果问题似乎重复,请提前道歉。但据我查看SF上的其他问题,他们没有回答这个问题。而且我是NH初学者,所以感谢您容忍我的菜鸟提问技巧;谢谢)

如何使用 NHibernate 以编程方式调用 Oracle 存储过程?

假设我们在 Oracle 数据库中有一个存储过程。我该如何调用它(即使使用 NHibernate 的本机 sql 功能)?

(Apologise in advance if the question seems to be repeated. But as far as I looked at other questions on SF, they did not answer this question. And I am a NH beginner so thanks for tolerating my noob asking skills; Thanks)

How to call an Oracle stored procedure using NHibernate programmatically?

Assume we have a stored procedure in an Oracle db. How can I call it (even with native sql feature of NHibernate)?

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

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

发布评论

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

评论(2

凑诗 2024-10-23 13:20:32

使用ISession.CreateSQLQuery 方法。

var query = session.CreateSQLQuery("EXEC myStoredProc :p1, :p2");
query.SetParameter("p1", "someValue");
query.SetParameter("p2", 5);

使用 ListUniqueResultExecuteUpdate 运行存储过程。

Use the ISession.CreateSQLQuery method.

var query = session.CreateSQLQuery("EXEC myStoredProc :p1, :p2");
query.SetParameter("p1", "someValue");
query.SetParameter("p2", 5);

Use either List, UniqueResult, or ExecuteUpdate to run the stored proc.

带刺的爱情 2024-10-23 13:20:32

在这里您可以调用包含输入和输出变量的 sp:
https://github.com/ lucianoybanez/csharp-useful-functions/blob/master/oracle-nhibernate-sp/OracleNhibernateStoreProcedure.cs

try
    {
        IDbCommand command = new OracleCommand();
        command.Connection = nHibernateSession.Connection;
        command.CommandType = CommandType.StoredProcedure;

        command.CommandText = "SP_NAME";

        command.Parameters.Add(new OracleParameter("@i_userFirstName", "jhon"));
        command.Parameters.Add(new OracleParameter("@i_userLastName", "Doe"));


        OracleParameter outputParameter =
            new OracleParameter("@o_result", OracleDbType.Varchar2, 255)
            {
                Direction = ParameterDirection.Output
            };
        command.Parameters.Add(outputParameter);

        nHibernateSession.Transaction.Enlist((DbCommand)command);

        command.ExecuteNonQuery();

        var result = ((OracleParameter)command.Parameters["@o_result"]).Value;

        if (result != null)
        {
            return result.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
    catch (Exception ex) when (ex.GetType() == typeof(OracleException))
    {
        throw new Exception(ex.Message, ex);
    }

Here you can call sp which contains input and output variables:
https://github.com/lucianoybanez/csharp-useful-functions/blob/master/oracle-nhibernate-sp/OracleNhibernateStoreProcedure.cs

try
    {
        IDbCommand command = new OracleCommand();
        command.Connection = nHibernateSession.Connection;
        command.CommandType = CommandType.StoredProcedure;

        command.CommandText = "SP_NAME";

        command.Parameters.Add(new OracleParameter("@i_userFirstName", "jhon"));
        command.Parameters.Add(new OracleParameter("@i_userLastName", "Doe"));


        OracleParameter outputParameter =
            new OracleParameter("@o_result", OracleDbType.Varchar2, 255)
            {
                Direction = ParameterDirection.Output
            };
        command.Parameters.Add(outputParameter);

        nHibernateSession.Transaction.Enlist((DbCommand)command);

        command.ExecuteNonQuery();

        var result = ((OracleParameter)command.Parameters["@o_result"]).Value;

        if (result != null)
        {
            return result.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
    catch (Exception ex) when (ex.GetType() == typeof(OracleException))
    {
        throw new Exception(ex.Message, ex);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文