c# 调用带有参数的存储过程方法--oracle篇

1     由于交叉表的八个报表写在sql中了,每个报表对应sql语句有300行之多,不能定义视图,因为必须传递个参数,所以利用了存储过程实现。

 

首先,定义包,然后定义包体,在用.net调用生成数据集即可

.net调用oracle带参数的存储过程,返回数据集

Oracle这个复杂一些,步骤如下:

pl/sql中首先写包的定义文件

CREATE OR REPLACE PACKAGE ZHBB AS
    TYPE t_cursor IS REF CURSOR ;
Procedure ZH11 (rq IN char, io_cursor IN OUT t_cursor);

Procedure ZH12 (rq IN char, io_cursor IN OUT t_cursor);

END ZHBB;

其次写包体的定义文件

CREATE OR REPLACE PACKAGE BODY ZHBB AS

  Procedure ZH11(rq IN char, io_cursor IN OUT t_cursor) IS

    v_cursor t_cursor;

  BEGIN

    OPEN v_cursor FOR

Select * from aa where ny=rq;

  io_cursor := v_cursor;

  END ZH11;

Procedure ZH12 (rq IN char, io_cursor IN OUT t_cursor) IS

。。。。。

END ZH12;

.net调用方法:

   public static DataTable GetDataTable(string PackageName,string ProName,string connString,string rq)

         {

connString= Provider= MSDAORA.1;User ID=xx;Data Source=xx;Password=xx;

 //定义下新的链接方法,因为原来的驱动"OraOLEDB.Oracle"不能满足需求,设置为"MSDAORA.1"

            OleDbConnection Oraclecon = new OleDbConnection(connString);

            Oraclecon.Open();

            OleDbCommand cmd = new OleDbCommand("{Call "+ PackageName +"."+ ProName +"(?, {resultset 0, io_cursor} )}", Oraclecon);

            cmd.Connection = Oraclecon;

            cmd.Parameters.Add("rq", OleDbType.VarChar, 8).Value = ""+ rq +"";

            OleDbDataAdapter da = new OleDbDataAdapter(cmd);

            DataTable dt = new DataTable();

            //DataSet ds = new DataSet();

            da.Fill(dt);

            Oraclecon.Close();

            Oraclecon.Dispose();

            return dt;

         }

}

转载于:https://www.cnblogs.com/kingjiong/archive/2008/11/04/1326426.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值