使用存储过程返回结果集,并绑定到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:
这样才能使用存储过程返回结果集。