Oracle存储过程返回DataSet(多个DataTable)给C#

一、存储过程
CREATE OR REPLACE PROCEDURE GET_SENDEXCEL_XY
    (
         
        ZGJ182X OUT SYS_REFCURSOR  ,
        ZGJ182Y OUT SYS_REFCURSOR  ,
        ZXN182X OUT SYS_REFCURSOR  ,
        ZXN182Y OUT SYS_REFCURSOR  ,
        ZLH182X OUT SYS_REFCURSOR  ,
        ZLH182Y OUT SYS_REFCURSOR  
    )
     IS
              mysql varchar(8000) :='' ;
              mysql_first varchar(8000) :='' ;
              mysql_gj varchar(8000) :='' ;
              mysql_xn varchar(8000) :='' ;
              mysql_lh varchar(8000) :='' ;
              mysql_gj_na varchar(8000):='';
              mysql_yb  varchar(8000) :='' ;
              firstday  varchar(50) :='';    ---前三周第1天
              
              
    BEGIN
        
         select to_char(m.fstartdate,'yyyy-mm-dd')  into firstday   
         from  scada_db.avg_week_month  m  
          where  to_char(m.fstartdate,'yyyy-mm-dd') <=to_char(sysdate-14-1,'yyyy-mm-dd')  --当天往前一天
           and to_char(m.fenddate,'yyyy-mm-dd')>=to_char(sysdate-14-1,'yyyy-mm-dd');
 
         

            select a.sqltext  into mysql_first
            from sysolap.AVG_DIA_SQL a  where a.code='send_xy_All3';
            mysql_first:=replace(mysql_first,'{firstday}',firstday);   ---首先替换周日期
            
            mysql_gj:=replace(mysql_first,'{GJXN}','ZGJPA');    ---初始化一期
            mysql_xn:=replace(mysql_first,'{GJXN}','ZXNPA');       ----初始化二期
            mysql_lh:= replace(mysql_first,'{GJXN}','ZLHPA');    ----初始化龙X
            mysql_gj_na:= replace(mysql_first,'{GJXN}','ZXNNA');    ----初始化西XNA
            mysql_yb := replace(mysql_first,'{GJXN}','ZYBPA');     ----初始化宜X182
            mysql_first:='';   
            
            ----1   ZGJ182X
           mysql:=replace(mysql_gj,'{table}','pcx182');
           mysql:=replace(mysql,'{边宽对角}','边宽182');
          
           open   ZGJ182X    for  mysql ;
               
          ----2   ZGJ182Y
           mysql:=replace(mysql_gj,'{table}','pcy182');
           mysql:=replace(mysql,'{边宽对角}','边宽182');
           open   ZGJ182Y    for  mysql ;
    
          ---3  ZXN182X
           mysql:=replace(mysql_xn,'{table}','pcx182');
           mysql:=replace(mysql,'{边宽对角}','边宽182');
           open   ZXN182X    for  mysql ;
           
          -- 4   ZXN182Y
            mysql:=replace(mysql_xn,'{table}','pcy182');
            mysql:=replace(mysql,'{边宽对角}','边宽182');
           open   ZXN182Y    for  mysql ;
           
           
            ---31  ZLHPA182X
           mysql:=replace(mysql_lh,'{table}','pcx182');
           mysql:=replace(mysql,'{边宽对角}','边宽182');
           open   ZLH182X    for  mysql ;
           
          -- 41   ZLHPA182Y
            mysql:=replace(mysql_lh,'{table}','pcy182');
            mysql:=replace(mysql,'{边宽对角}','边宽182');
           open   ZLH182Y    for  mysql ;
           
           
     
                 
   END;

二、C#程序接收存储过程

/// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="procName">存储过程名称</param>
        /// <param name="conString">数据库连接串</param>
        /// <param name="strARR">入参数组</param>
        /// <returns></returns>
        private DataSet  getData(string procName, string conString, params string[] strARR)
        {
            using (Oracle.ManagedDataAccess.Client.OracleConnection con = new Oracle.ManagedDataAccess.Client.OracleConnection())
            {

                OracleCommand cmd2 = new OracleCommand();
                OracleDataAdapter oda2 = new OracleDataAdapter(cmd2);
                OracleParameter par1 = null;
                DataSet ds = new DataSet();
                con.ConnectionString = 数据库连接串;
                con.Open();
                cmd2.Connection = con;
                cmd2.CommandType = CommandType.StoredProcedure;
                cmd2.CommandText = procName; 
                foreach (string  item in strARR)
                {
                    par1 = new OracleParameter(item, OracleDbType.RefCursor);
                    par1.Direction = ParameterDirection.Output;
                    cmd2.Parameters.Add(par1);
                }
                oda2.Fill(ds);
                con.Close();
                return ds;
            }  
        }

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中连接 Oracle 数据库并查询后,可以将查询结果保存在各种数据结构中,如数组、列表、数据集、数据表等等。以下是一些示例代码: 1. 将查询结果保存在数组中: ```csharp using Oracle.DataAccess.Client; string connString = "Data Source=<Oracle 数据库连接字符串>;User ID=<用户名>;Password=<密码>"; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); string sql = "SELECT * FROM <表名> WHERE <条件>"; using (OracleCommand cmd = new OracleCommand(sql, conn)) { using (OracleDataReader reader = cmd.ExecuteReader()) { List<object[]> resultList = new List<object[]>(); while (reader.Read()) { object[] rowValues = new object[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) { rowValues[i] = reader.GetValue(i); } resultList.Add(rowValues); } // 处理查询结果数组 } } } ``` 在上面的代码中,将查询结果保存在 `List<object[]>` 类型的列表中,每行数据都是一个 `object[]` 类型的数组,数组元素为每个字段的值。 2. 将查询结果保存在数据集中: ```csharp using Oracle.DataAccess.Client; using System.Data; string connString = "Data Source=<Oracle 数据库连接字符串>;User ID=<用户名>;Password=<密码>"; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); string sql = "SELECT * FROM <表名> WHERE <条件>"; using (OracleDataAdapter adapter = new OracleDataAdapter(sql, conn)) { DataSet dataSet = new DataSet(); adapter.Fill(dataSet); // 处理查询结果数据集 } } ``` 在上面的代码中,将查询结果保存在 `DataSet` 类型的数据集中,数据集包含一个或多个 `DataTable` 类型的数据表,每个数据表对应查询结果的一个结果集。 3. 将查询结果保存在数据表中: ```csharp using Oracle.DataAccess.Client; using System.Data; string connString = "Data Source=<Oracle 数据库连接字符串>;User ID=<用户名>;Password=<密码>"; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); string sql = "SELECT * FROM <表名> WHERE <条件>"; using (OracleDataAdapter adapter = new OracleDataAdapter(sql, conn)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // 处理查询结果数据表 } } ``` 在上面的代码中,将查询结果保存在 `DataTable` 类型的数据表中,数据表包含多行多列的查询结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值