c# 调用存储过程

1.调用返回OUT的存储过程

a.调用OUT字符串的存储过程;

csharp 复制代码
      #region 连接数据库
      /// <summary>
      /// 连接数据库
      /// </summary>
      /// <param name="connStatus"></param>
      /// <param name="dbNode"></param>
      /// <returns></returns>
      public OracleConnection OpenConn(ref string connStatus, DBConnEntity dbNode)
      {
          try
          {
              if (conn == null || conn.State == ConnectionState.Closed)
              {
                  //默认端口
                  if (dbNode.Port.Length < 1)
                  {
                      dbNode.Port = "1521";
                  }

                  conn = new OracleConnection();
                  //单节点
                  if (dbNode.IP == null || dbNode.IP2 == null)
                  {
                      conn.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + dbNode.IP +
                          ")(PORT=" + dbNode.Port + "))(CONNECT_DATA=(SERVICE_NAME=" + dbNode.DbSid + ")));" +
                      "Persist Security Info=True;User ID=" + dbNode.DbUser + ";Password=" + dbNode.DbPassW + ";";
                  }
                  else
                  {
                      //集群方式
                      string connStr = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =" + dbNode.IP + ")(PORT = " + dbNode.Port + "))(ADDRESS = (PROTOCOL = TCP)(HOST =" + dbNode.IP2 + ")(PORT = " + dbNode.Port + "))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =" + dbNode.DbSid + ")(FAILOVER_MODE=(TYPE = session)(METHOD = basic)(RETRIES = 180)(DELAY = 5) ) ));" +
                      "Persist Security Info=True;User ID=" + dbNode.DbUser + ";Password=" + dbNode.DbPassW + ";";
                      conn.ConnectionString = connStr;
                  }

                  conn.Open();
                  connStatus = "success";
              }
              else
              {
                  connStatus = "success";
              }
          }
          catch (Exception ex)
          {
              connStatus = ex.Message;
              conn = null;
          }

          return conn;
      }
//执行存储过程
  public string execCancelJCErpProcedure(string targetId, DBConnEntity dbNode, ref string strNGPASS)
        {
            string returnMsg = "";
            try
            {
                conn = OpenConn(ref strNGPASS, dbNode);
                if (strNGPASS == "success")
                {
                    using (conn)
                    {
                        using (OracleCommand cmd =
                            new OracleCommand("存储过程名称", conn))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;

                            OracleParameter locatorId =
                            new OracleParameter("locatorId", OracleDbType.Varchar2);
                            locatorId.Direction = ParameterDirection.Input;
                            locatorId.Value = targetId;
                            cmd.Parameters.Add(locatorId);

                            OracleParameter vs_msg =
                                new OracleParameter("resultOut", OracleDbType.Varchar2, 4000);//返回字符串时,需要设置字符串大小
                            vs_msg.Direction = ParameterDirection.Output;
                            cmd.Parameters.Add(vs_msg);

                            cmd.ExecuteNonQuery();

                            returnMsg = vs_msg.Value.ToString();                           
                        }
                    }
                }
                //连接数据库异常
                else
                {
                    strNGPASS = "NG";
                    returnMsg = strNGPASS; //连接数据库异常描述
                }
            }
            catch (Exception ex)
            {
                strNGPASS = "NG";
                returnMsg = ex.Message;
            }
            return returnMsg;
        }

b.调用OUT 数值的存储过程;

csharp 复制代码
 public int execZLProcedure(string proceName, DBConnEntity dbNode,string model_name, ref string strNGPASS)
        {
            int batch_Id = 0;
            try
            {
                conn = OpenConn(ref strNGPASS, dbNode);//连接数据库;
                if (strNGPASS == "success")
                {
                    using (conn)
                    {
                        using (OracleCommand cmd = new OracleCommand(proceName, conn))  //proceName存储过程名称
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            OracleParameter modelName = new OracleParameter("modelName", OracleDbType.Varchar2);
                            modelName.Direction = ParameterDirection.Input;
                            modelName.Value = model_name;
                            cmd.Parameters.Add(modelName);

                            OracleParameter batchId = new OracleParameter("batchId", OracleDbType.Int64);//
                            batchId.Direction = ParameterDirection.Output;
                            cmd.Parameters.Add(batchId);

                            cmd.ExecuteNonQuery();

                            batch_Id = int.Parse(batchId.Value.ToString());
                            strNGPASS = "OK";
                        }
                    }
                }
                else    //连接数据库异常
                {
                    strNGPASS = "NG";
                }
            }
            catch (Exception ex)
            {
                strNGPASS = "NG";
            }
            return batch_Id;
        }
相关推荐
纪伊路上盛名在5 分钟前
如何批量获取蛋白质序列的所有结构域(domain)数据-2
数据库·人工智能·机器学习·统计·计算生物学·蛋白质
2301_772093561 小时前
高并发webserver_interview
运维·服务器·数据库·后端·网络协议·mysql·wireshark
大G的笔记本3 小时前
MySQL 大表查询优化、超大分页处理、SQL 慢查询优化、主键选择
数据库·sql·mysql
Lear3 小时前
Redis 持久化机制
数据库
儒道易行3 小时前
【攻防实战】Redis未授权RCE联动metasploit打穿三层内网(上)
数据库·redis·网络安全·缓存
爱考证的小刘4 小时前
MySQL OCP认证、Oracle OCP认证
mysql·oracle·oracle数据库·oracle认证·mysql自学·mysql题库·oracle学习
小宁爱Python4 小时前
从零搭建 RAG 智能问答系统 6:Text2SQL 与工作流实现数据库查询
数据库·人工智能·python·django
yjsstar4 小时前
数据库MySQL基础
数据库·mysql
云边有个稻草人4 小时前
KingbaseES数据库性能调优指南:从理论到实践的全链路解析
数据库·金仓数据库
nianniannnn4 小时前
Qt布局管理停靠窗口QDockWidget类
开发语言·数据库·c++·qt·qt5·qt6.3