动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   .Net → 阅读文章

 ASP.NET调用oracle实现快速分页

作者来源: 
阅读 1906 人次 , 2006-4-26 9:58:00 


  本文转自PPLUNCLE的blog:http://dev.csdn.net/article/82/82808.shtm

《使用 ADO.NET 访问 Oracle 9i 存储过程》见下面的介绍(如果对这个不怎么懂的,还是先看看下面文章)http://www.microsoft.com/china/MSDN/library/data/dataAccess/DMSDNorsps.mspx  

  包定义:  

   create or replace package MaterialManage is

   TYPE T_CURSOR IS REF CURSOR;

   Procedure Per_QuickPage

   (

   TbName in varchar2, --表名

   FieldStr in varchar2, --字段集

   RowFilter in varchar2, --过滤条件

   SortStr in varchar2, --排序集

   RownumFieldStr in varchar2, --分页条件

   TotalCount out number, --总记录数

   Cur_ReturnCur out T_CURSOR --返回的游标

   );

  end MaterialManage;

  
  包主体:
  

  create or replace package body MaterialManage is

   Procedure Per_QuickPage

   (

   TbName in varchar2, --表 名

   FieldStr in varchar2, --字段集

   RowFilter in varchar2, --过滤条件

   SortStr in varchar2, --排序集

   MinRowNum in number, --分页小值

   MaxRowNum in number, --分页大值

   TotalCount out number, --总记录数

   Cur_ReturnCur out T_CURSOR

   )

   is

   v_SourceTb1 varchar2(3000); --动态表名1

   v_SourceTb2 varchar2(3000); --动态表名2

   v_SourceTb3 varchar2(3000); --动态表名3

   v_SourceTb4 varchar2(3000); --动态表名4

   v_TotalCount varchar2(50); --总记录数

   v_sql varchar2(3000); --动态sql

   begin

   v_SourceTb1 := '(select '   FieldStr   ' from '   TbName   ') SourceTb1';

   v_SourceTb2 := '(select * from '   v_SourceTb1   ' where '   RowFilter   ' '   SortStr   ') SourceTb2';

   v_SourceTb3 := '(select rownum as Rowindex,SourceTb2.* from '   v_SourceTb2   ' where rownum<='   MaxRowNum   ') SourceTb3';

   v_SourceTb4 := '(select * from '   v_SourceTb1   ' where '   RowFilter   ') SourceTb4';

   v_sql := 'select count(*) as TotalCount from '   v_SourceTb4;

   execute immediate v_sql into v_TotalCount;

   TotalCount := v_TotalCount;

   v_sql := 'select * from '   v_SourceTb3   ' where RowIndex >='  MinRowNum;

   open Cur_ReturnCur for v_sql;

   end Per_QuickPage;

  END MaterialManage;  

  由于oracle有个rownum特性,所以分页的时候就是利用rownum来实现。如果大家还有什么更好的办法记得告诉我一声,多谢了,因为我测试了上面的分页方法效率并不是很高。  

  存储过程返回了两个参数:TotalCount :当前条件下的总记录数 Cur_ReturnCur :游标类型,就是所要读取的记录的集合
 
  下面是ASP.NET中调用的代码:  

  ///

  /// 调用存储过程实现快速分页

  ///


  /// 表名称

  /// 字段名称

  /// 过滤条件

  /// 排序字段

  /// 分页小值

  /// 分页大值

  /// 总记录(需要返回)

  /// DataTable

  public DataTable QuickPage(string TbName,string FieldStr,string RowFilter,string SortStr,int MinRowNum,int MaxRowNum,ref int RecordCount)

  {

   OracleConnection conn = new OracleConnection(ConfigurationSettings.AppSettings["OracleConnstr"].ToString());

   OracleCommand cmd = new OracleCommand();

   cmd.Connection = conn;

   cmd.CommandText = "MaterialManage.Per_QuickPage";

   cmd.CommandType = CommandType.StoredProcedure;
  

   cmd.Parameters.Add("TbName",OracleType.VarChar,50); //表 名

   cmd.Parameters["TbName"].Direction = ParameterDirection.Input;

   cmd.Parameters["TbName"].Value = TbName;
  

   cmd.Parameters.Add("FieldStr",OracleType.VarChar,3000); //字段集

   cmd.Parameters["FieldStr"].Direction = ParameterDirection.Input;

   cmd.Parameters["FieldStr"].Value = FieldStr;
  

   cmd.Parameters.Add("RowFilter",OracleType.VarChar,3000); //过滤条件

   cmd.Parameters["RowFilter"].Direction = ParameterDirection.Input;

   cmd.Parameters["RowFilter"].Value = RowFilter;
  

   cmd.Parameters.Add("SortStr",OracleType.VarChar,3000); //排序字段

   cmd.Parameters["SortStr"].Direction = ParameterDirection.Input;

   cmd.Parameters["SortStr"].Value = SortStr;
  

   cmd.Parameters.Add("MinRowNum",OracleType.Number); //分页小值

   cmd.Parameters["MinRowNum"].Direction = ParameterDirection.Input;

   cmd.Parameters["MinRowNum"].Value = MinRowNum;
  

   cmd.Parameters.Add("MaxRowNum",OracleType.Number); //分页大值

   cmd.Parameters["MaxRowNum"].Direction = ParameterDirection.Input;

   cmd.Parameters["MaxRowNum"].Value = MaxRowNum;
  

   cmd.Parameters.Add("TotalCount",OracleType.Number); //页总记录数

   cmd.Parameters["TotalCount"].Direction = ParameterDirection.Output;

   cmd.Parameters["TotalCount"].Value = 0;  

   cmd.Parameters.Add("Cur_ReturnCur",OracleType.Cursor); //返回的游标

   cmd.Parameters["Cur_ReturnCur"].Direction = ParameterDirection.Output;
  

   DataSet Ds = new DataSet();

   OracleDataAdapter adapter= new OracleDataAdapter(cmd);

   adapter.Fill(Ds);

   conn.Close();
  

   //总记录数

   RecordCount = int.Parse(cmd.Parameters["TotalCount"].Value.ToString());

   return Ds.Tables[0];

  }
  
 本文Tagsoracle  分页  C#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:ASP.NET 2.0中使用multiview控件
· 下一篇:ADO.NET入门
· ASP.NET应用程序资源访问安全模型
· 带你走进ASP.NET(1)
· ASP.NET中动态修改web.config中的设置项目(前台代码)
· jsp计数器制作手册
· Microsoft .NET 框架 FAQ


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077