philzhou

导航

ado.net access oracle dataset via store procedure

使用存储过程返回结果集,并绑定到ado.net对象中在sql server里面是非常直观的。

   1: create procedure GetAllRecords
   2: as
   3: select * from dept;

存储过程返回一个结果集,然后通过SqlDataAdapter绑定给DataSet。

 

但是在Oracle里面返回结果集存储过程是不可以这样写的,返回的结果集要通过游标来完成的。

首先创建一个包,新建一个应用游标类型

   1: create or replace package cust_types is
   2:   type ref_cursor is ref cursor;
   3: end cust_types;

然后再使用该类型声明一个返回参数

   1: create or replace procedure GetDept(all_rec out cust_types.ref_cursor) is
   2: begin
   3:   open all_rec for select * from dept;
   4: end GetDept;

 

在.net中调用是要这样写:

   1: var connStr = ConfigurationManager.ConnectionStrings["ora"].ConnectionString;
   2:  
   3: using (OracleConnection conn = new OracleConnection())
   4: {
   5:     conn.ConnectionString = connStr;
   6:     conn.Open();
   7:     var cmd = conn.CreateCommand();
   8:     cmd.CommandText = "GetDept";
   9:     cmd.CommandType = CommandType.StoredProcedure;
  10:     cmd.Parameters.Add(new OracleParameter("All_Rec", OracleDbType.RefCursor){Direction = ParameterDirection.Output});
  11:     var adapter = new OracleDataAdapter(cmd);
  12:     var ds = new DataSet();
  13:     adapter.Fill(ds);
  14: }
  15:  
  16:  

这样才能使用存储过程返回结果集。

posted on 2013-09-24 18:20  philzhou  阅读(346)  评论(0编辑  收藏  举报