C# 调用Oracle 存储过程返回数据集 实例

1. 在oracle 下创建表

     t_user(

        ID varchar(20),

        Name varchar(20)

       )

 2.  添加数据 

           '1' , '张三'

           '2' , '李四'

 3. 创建包并且定义变量和声明存储过程

     CREATE OR REPLACE PACKAGE pkg_user AS
        --定义返回值(游标类型)
      TYPE myrctype IS REF CURSOR;
         --定义查询过程
      PROCEDURE sp_userlist (cur_result OUT myrctype);
      END pkg_user;

 4.创建存储过程 sp_userlist

     CREATE OR REPLACE PACKAGE BODY "PKG_USER" AS
       --查询过程
     PROCEDURE sp_userlist(cur_result OUT myrctype)
     IS
        sqlstr   VARCHAR2 (500);
     BEGIN
          OPEN cur_result FOR
             select * from t_user ;
    END sp_userlist ;
    END pkg_user;

5. C# 中就可以调用这个存储过程了.

    在Oracle helper 中添加

   

      public static void RunSql(string SqlString, CommandType cmdType, out DataTable dt)
        {
         
            OracleCommand cmd = CreateSqlCommand(SqlString, cmdType);
            OracleDataAdapter da;
            da = new OracleDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dt = ds.Tables[0];
            da.Dispose();

            Close();

        }

 

--------------------------------------------------------------------------------------------------------------------------------       

           protected static OracleCommand CreateSqlCommand(string SqlString,  CommandType cmdType)
        {
            // 确认打开连接
            Open();

            OracleCommand cmd = conn.CreateCommand();
            cmd.CommandType = cmdType;
            cmd.CommandText = SqlString;

            OracleParameter p = new OracleParameter();
            p = new OracleParameter("cur_result", System.Data.OracleClient.OracleType.Cursor);
            p.Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.Add(p);

            return cmd;
        }

   

--------------------------------------------------------------------------------------------------------------------------------     

        protected static void Open()
        {
            // 打开数据库连接

             conn = new OracleConnection("Data Source=ORCL;User Id=mobile;Password=server;";);
            if (conn.State == System.Data.ConnectionState.Closed)
                conn.Open();
        }

 

6.  获取数据

       public DataTable  GetUserList()
        {
            try
            {
                DataTable dt = new DataTable();
              
                OracleHelper.RunSql("sp_userlist, CommandType.StoredProcedure, out dt);
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

   我们可以看到dt里有两条数据('张三'和'李四')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值