之前用的是GridView自带的分页功能,那速度啊慢的真实不行  ,决定自定义分页  Oracle库里有5W多条数据

AspnetPager做的还是不错,拿过来用

Oracle 分页存储过程:

create or replace package JT_P_page is
type type_cur is ref cursor;                    --定义游标变量用于返回记录集
procedure Pagination  (Pindex in number,        --要显示的页数索引,从0开始
                       Psql in varchar2,        --产生分页数据的查询语句
                       Psize in number,         --每页显示记录数
                       Pcount out number,       --返回的分页数
                       Prowcount out number,    --返回的记录数
                       v_cur out type_cur      --返回分页数据的游标
                       );
end JT_P_page;
--定义包主体
create or replace package body JT_P_page is
  procedure Pagination(Pindex in number, --要显示的页数索引,从0开始
                       Psql in varchar2, --产生分页数据的查询语句
                       Psize in number, --每页显示记录数
                       Pcount out number, --返回的分页数
                       Prowcount out number, --返回的记录数
                       v_cur out type_cur --返回分页数据的游标
                       ) AS
    v_sql VARCHAR2(1000);
    v_Pbegin number;
    v_Pend number;
  begin
    v_sql := 'select count(*) from (' || Psql || ')';
    execute immediate v_sql into Prowcount; --计算记录总数
    Pcount := ceil(Prowcount / Psize); --计算分页总数
    --显示任意页内容
    v_Pend := Pindex * Psize + Psize;
    v_Pbegin := v_Pend - Psize + 1;    
    v_sql :=  'select * from (' || Psql || ') where rn between ' || v_Pbegin || ' and ' || v_Pend;         
    open v_cur for v_sql;
  end Pagination; 
end JT_P_page;

这个是在网上找的,还不错  主要是根据伪列 rownum作为where查询条件  进行帅选,关于rownum伪列可以查看

http://www.cnblogs.com/chinhr/archive/2007/09/30/911685.html  写的很透彻 ,通过这次做这个Oracle分页算是对rownum有了初步的认识,实践出真理 , 有了存储过程截下来就是调用

存储过程有6个参数 前三个是输入参数,后三个是输出参数

Help.cs:

public static DataTable ReturnDataTable(int index,string sql,int pageSize)
    {     
        DataTable dt = new DataTable();
        try
        {          
            OracleParameter []param=new OracleParameter []{new OracleParameter("Pindex",OracleType.Number),new OracleParameter("Psql",OracleType.VarChar),new OracleParameter("Psize",OracleType.Number),new OracleParameter("Pcount",OracleType.Number),new OracleParameter("Prowcount",OracleType.Number),new OracleParameter("v_cur",OracleType.Cursor)};
            param[0].Value = index;
            param[1].Value = sql;
            param[2].Value = pageSize;

param[0].Direction = ParameterDirection.Input;
            param[1].Direction = ParameterDirection.Input;
            param[2].Direction = ParameterDirection.Input;
            param[3].Direction = ParameterDirection.Output;
            param[4].Direction = ParameterDirection.Output;
            param[5].Direction = ParameterDirection.Output;

dt= OracleHelper.ReturnDataTable(OracleHelper.dbCon, CommandType.StoredProcedure, "JT_P_page.Pagination", param);
            Help._rowCount = int.Parse(param[4].Value.ToString()); 
          
        }
        catch (OracleException on)
        {
            throw on;              
        }      
        return dt;
    }

注意一下再调用的时候 参数名必须和存储过程中的参数保持一致 否则可能会报错  例如:new OracleParameter("Pindex",OracleType.Number)  中的 Pindex 和存储过程procedure Pagination  (Pindex in number 中的一样,Aspnetpage作为一个第三方控件,直接从网上下载后 在VS2005工具栏里把.dll导进去  就可以拿来用了  前台页面Update_Agent.aspx.cs里:

protected void Page_Load(object sender, EventArgs e)
    {
        
        if (!IsPostBack)
        {
            BindGridView(0, "union_view", _pageSize);         
            AspNetPager1.RecordCount = (Help._rowCount >= 0) ? Help._rowCount : 0;          
        } 
    }

private void BindGridView(int index, string sql, int pageSize)
    {
        DataTable dt;
        if (sql != "")
        {
            ViewState["IsProcedure"] = "yes";
            dt = Help.ReturnDataTable(index, sql, pageSize);
        }
        else
        {
            ViewState["IsProcedure"] = "no";
            dt = Help.ReturnDataTableByCondition(dateinput.Value, dateinput2.Value, orderID.Value.Trim(), dgWay.SelectedValue, AspNetPager1.CurrentPageIndex - 1, AspNetPager1.PageSize);
        }
        iagentView.DataSource = dt;
        DataBind();
        AspNetPager1.RecordCount = (sql!="")?Help._rowCount:Help.ReturnRows(dateinput.Value, dateinput2.Value, orderID.Value.Trim(), dgWay.SelectedValue);
        AspNetPager1.PageSize = pageSize;
        AspNetPager1.CustomInfoHTML = "记录总数:<font color=\"blue\"><b>" + AspNetPager1.RecordCount.ToString() + "</b></font>";  
        AspNetPager1.CustomInfoHTML += " 总页数:<font color=\"blue\"><b>" + AspNetPager1.PageCount.ToString() + "</b></font>";  
        AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";  
    }

/// <summary>
    /// AspNetPager1   PageChanged事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
        if (ViewState["IsProcedure"] != null && ViewState["IsProcedure"].ToString() == "yes")
        BindGridView(AspNetPager1.CurrentPageIndex-1, "union_view", _pageSize);
        else
        BindGridView(AspNetPager1.CurrentPageIndex - 1, "", _pageSize); 
          }

Update_Agent.aspx 里 AspNetPager 的申明 以及一些属性的设置  这个网上可以搜的倒

<webdiyer:AspNetPager ID="AspNetPager1" CssClass="pages" CurrentPageButtonClass="cpb"  runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页"  AlwaysShow="true" PageIndexBoxType="DropDownList" OnPageChanged="AspNetPager1_PageChanged"  ShowCustomInfoSection="left"  NumericButtonTextFormatString="{0}" >
            </webdiyer:AspNetPager>

我做了一下测试,用存储过程分页比原来GridView自带的分页效率提高了不止一倍 ,时间只有原来的一半不到

转载于:https://www.cnblogs.com/xiachufeng/archive/2010/07/22/1782731.html

ASP.NET调用Oracle分页存储过程并结合ASPnetpager分页控件 实现分页功能相关推荐

  1. 用.NET调用oracle的存储过程返回记录集

    最近做一个项目,为了提高数据库安全性,客户要求所有数据库操作都要放在存储过程.象一般的更新操作,返回一个值的,都比较容易实现.而要想返回记录集就比较麻烦,我在网上搜了一下,这方面的文章并不多.在此总结 ...

  2. ASP.NET技巧:GridView控件自定义分页详解第一页

    ASP.NET技巧:GridView控件自定义分页详解 日期:2007年9月11日 作者: 查看:[大字体 中字体 小字体] <script src="../gg/info468.js ...

  3. Datalist控件,Repeater控件如何分页?

    Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...

  4. 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)

    给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...

  5. 使用PagedDataSource类实现DataList和Repeater控件的分页显示

    Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...

  6. 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件

    知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...

  7. 在 DataList 或 Repeater 控件中分页报表数据44

    简介 在在线应用程序中显示数据时,分页和排序是两个非常常见的功能.例如,在一个在线书店搜寻 ASP.NET 书籍时,可能会有数以百计种这样的图书,但在报表的每页只列出十个匹配的搜索结果.而且,搜索结果 ...

  8. 读书笔记:《Aspx开发200问》——如何实现Repeater控件的分页

    由于Repeater控件没有分页相关的属性,要使用System.Web.UI.WebControl中的PageDataSource类. PageDataSource封装了DataGrid控件的分页属性 ...

  9. ASP中利用OWC控件实现图表功能详解[zz]

    ASP中利用OWC控件实现图表功能详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图, ...

  10. Asp.net 2.0 动态加载其他子目录用户控件问题

    通常我们要在程序中动态加载用户控件: 方法很简单直接在程序里键入: (usercontrol type)a = (usercontrol type)Page.LoadControl("~/x ...

最新文章

  1. php json.parse,PHP JSON头导致JSON.parse出错(使用jQuery)
  2. 安全研究人受够!再公布WordPress 3大外挂漏洞
  3. 【Python】创建、保存、复制虚拟环境 venv
  4. ps 毛发 边缘_不会抠图怎么办?PS画笔绘制毛发技巧,抠图流程解析
  5. ZooKeeper的安装及部署
  6. 初解vue脚手架vue-cli,及demo示例(一)
  7. 【图像融合】主成分分析PCA
  8. win10 office 家庭和学生版 excel个人工作簿 PERSONAL.XLSB 的保存位置
  9. nginx之206异常
  10. spring自动扫描的注解@Component @Controller @Service @Repository
  11. matlab源码——政治优化算法(Political Optimizer,PO)
  12. 《Java就业培训教程》_张孝祥_书内源码_10
  13. 小米电视共享计算机权限,小米电视局域网共享文件 小米盒子局域网共享视频通用方法...
  14. 集成DC电源RS485/422收发器数字隔离芯片CA-IS309X
  15. Python实现图片转pdf
  16. 鸿蒙大陆9.1正式版礼包,鸿蒙大陆2.0正式版
  17. python与图像处理书籍_数字图像处理与Python实现
  18. php 两张图片 合并 扣,php图片合成方法(多张图片合成一张)
  19. 计算机玩游戏特别卡,Win7电脑游戏卡顿怎么办 win7玩游戏卡如何解决
  20. AMAZON SP API Feed

热门文章

  1. 年轻人有梦想,老人有回忆
  2. [No0000BC]ADO.NET中的几个主要对象
  3. application/x-www-form-urlencoded 的contentType,POST数据内容过大,导致tomcat的request取不到参数...
  4. 你真的了解分层架构吗?——写给被PetShop毒害的朋友们 (转)
  5. ajax项目中使用模板
  6. javascript设计模式-singleton(单例)模式
  7. 视频压缩的I帧,P帧和B帧。
  8. Linux基础(7)--串口编程
  9. PCA与图像压缩与去噪
  10. mysql8安装版安装教程_MySQL8.0版本安装教程