C# 取oracle返回的多个结果集的问题
小弟刚学oracle,碰到个难题,希望大家不吝指教。
环境是win8.1 64位,vs2010开发,plsql developer10.
具体问题是:
有6个select语句,返回6个datatable,在c#里用dataset接收。
我使用了包,然后用6个游标返回了6个结果(等于返回了一个dataset),然后成功了。
但问题是,这样取数据过程极为缓慢,我在页面上操作了一下,起码得5秒钟才会反应。不知各位大虾有没有好的办法?
代码贴上:
后台是这样写的:
环境是win8.1 64位,vs2010开发,plsql developer10.
具体问题是:
有6个select语句,返回6个datatable,在c#里用dataset接收。
我使用了包,然后用6个游标返回了6个结果(等于返回了一个dataset),然后成功了。
但问题是,这样取数据过程极为缓慢,我在页面上操作了一下,起码得5秒钟才会反应。不知各位大虾有没有好的办法?
代码贴上:
--包定义
create or replace package pack_siit is
type t_cur_1 is ref cursor;--定义游标变量
type t_cur_2 is ref cursor;
type t_cur_3 is ref cursor;
type t_cur_4 is ref cursor;
type t_cur_5 is ref cursor;
type t_cur_6 is ref cursor;
procedure GZPC_GZSOFT_GETCODEDATASET
(
cur_1 out t_cur_1,
cur_2 out t_cur_2,
cur_3 out t_cur_3,
cur_4 out t_cur_4,
cur_5 out t_cur_5,
cur_6 out t_cur_6
);
end pack_siit;
--包主体
create or replace package body pack_siit is
procedure GZPC_GZSOFT_GETCODEDATASET
( cur_1 out t_cur_1,
cur_2 out t_cur_2,
cur_3 out t_cur_3,
cur_4 out t_cur_4,
cur_5 out t_cur_5,
cur_6 out t_cur_6)
as
begin
OPEN cur_1 FOR
select * from Basic_Code where substr(CodeId,4,2)='00' and substr(CodeId,2,4)!='0000' and CodeId!='000000';
OPEN cur_2 FOR
select * from Basic_Code where substr(CodeId,4,2)!='00';
OPEN cur_3 FOR
select * from Basic_Code where substr(CodeId,2,4)='0000';
OPEN cur_4 FOR
select * from basic_town;
OPEN cur_5 FOR
select * from basic_village;
OPEN cur_6 FOR
select codeid,(codeid||TownId) as townid,TownName from Basic_Town;
end GZPC_GZSOFT_GETCODEDATASET;
end pack_siit;
后台是这样写的:
DataSet tempds = null;
OracleParameter[] parameters = {
new OracleParameter("cur_1",OracleType.Cursor),
new OracleParameter("cur_2",OracleType.Cursor),
new OracleParameter("cur_3",OracleType.Cursor),
new OracleParameter("cur_4",OracleType.Cursor),
new OracleParameter("cur_5",OracleType.Cursor),
new OracleParameter("cur_6",OracleType.Cursor)};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Direction = ParameterDirection.Output;
parameters[2].Direction = ParameterDirection.Output;
parameters[3].Direction = ParameterDirection.Output;
parameters[4].Direction = ParameterDirection.Output;
parameters[5].Direction = ParameterDirection.Output;
--这是公司里的方法,其实就是写入存储过程名就好了。我用了包,所以是用包名.存储过程名。
tempds = GZSoft.DBUtility.DbHelper.ExecuteDataSetByProc("pack_siit.GZPC_GZSOFT_GETCODEDATASET", parameters);
...全文
相关推荐
Oracle 返回多个结果集
在客户端应用中,如Java或C#,连接到Oracle数据库时,也可以通过适配器或ODBC/JDBC驱动程序来处理多个结果集。
Oracl返回多个结果集
### Oracle返回多个结果集#### 一、基本概念在Oracle数据库中,通常情况下,一个查询只能返回一个结果集。
oracle 返回结果集
存储过程返回结果集
C#连接Oracle实例(含源码和数据库)
)或`ExecuteReader()`(有结果集返回的操作)。
基于C#连接Oracle数据库Oracle.ManagedDataAccess
这个库包含了所有必要的组件,使得C#程序可以方便地执行SQL语句、管理数据库连接以及处理结果集。要开始使用Oracle.ManagedDataAccess,首先需要在项目中引入相应的NuGet包。


基础和管理
