【问题标题】:How to call an Oracle stored procedure using NHibernate programmatically?如何以编程方式使用 NHibernate 调用 Oracle 存储过程?
【发布时间】:2020-06-16 10:17:34
【问题描述】:

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

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

假设我们在 Oracle 数据库中有一个存储过程。我怎么称呼它(即使使用 NHibernate 的原生 sql 功能)?

【问题讨论】:

    标签: oracle nhibernate stored-procedures


    【解决方案1】:

    使用ISession.CreateSQLQuery 方法。

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

    使用ListUniqueResultExecuteUpdate 运行存储过程。

    【讨论】:

      【解决方案2】:

      在这里你可以调用包含输入和输出变量的 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);
          }
      

      【讨论】:

        猜你喜欢
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 2010-10-12
        相关资源
        最近更新 更多