文档章节

Oracle通用分页存储过程和AspNetPage结合

深圳大道
 深圳大道
发布于 2016/12/29 15:37
字数 590
阅读 1
收藏 0
--包头部分

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 (SELECT a.*, ROWNUM rn FROM (' || Psql || ') a) WHERE rn >= ' || v_Pbegin || ' AND rn <= ' || v_Pend;
    DBMS_OUTPUT.put_line(v_sql);
    open v_cur for v_sql;
end Pagination;
end JT_P_page;

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView(0, "DD_Demo", AspNetPager1.PageSize);
            
        }
    }
    /// <summary>
    /// 数据绑定
    /// </summary>
    /// <param name="index">当前页码</param>
    /// <param name="sql">表名或者视图名</param>
    /// <param name="pageSize">每页显示记录数</param>
    private void BindGridView(int index, string sql, int pageSize)
    {
        int totalCount = 0;
        int pageCount = 0;
        DataTable dt = ReturnDataTable(index, sql, pageSize, out totalCount, out pageCount);
        GridView1.DataSource = dt;
        GridView1.DataBind();
        AspNetPager1.RecordCount = totalCount;
        AspNetPager1.PageSize = pageSize;
        AspNetPager1.CustomInfoHTML = "  共<font color='#FF8000'><b>" + AspNetPager1.RecordCount.ToString() + "</b></font>条记录";        
        AspNetPager1.CustomInfoHTML += " 当前第<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>页";
        AspNetPager1.CustomInfoHTML += "/共<font color=#FF8000'><b>" + AspNetPager1.PageCount.ToString() + "</b></font>页";
    }
    /// <summary>
    /// 执行存储过程返回分页数据
    /// </summary>
    /// <param name="index">当前页码</param>
    /// <param name="sql">表名或者视图名</param>
    /// <param name="pageSize">每页显示记录数</param>
    /// <param name="totalCount">返回记录总数</param>
    /// <param name="pageCount">返回页面总数</param>
    /// <returns></returns>
    public static DataTable ReturnDataTable(int index, string sql, int pageSize, out int totalCount,out int pageCount)
    {
        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 = Maticsoft.DBUtility.DbHelperOra.RunProcedure("JT_P_page.Pagination", param, "queryTable").Tables["queryTable"];
            pageCount = int.Parse(param[3].Value.ToString());
            totalCount = int.Parse(param[4].Value.ToString());
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        return dt;
    }
    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
        BindGridView(AspNetPager1.CurrentPageIndex - 1, "DD_Demo", AspNetPager1.PageSize);
    }

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/7900128

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
基于Mysql的通用分页存储过程

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://wenlujun.blog.51cto.com/336737/71819   前面“结合JSTL用配置来完成基...

Yamazaki
2012/07/05
11
0
主流数据库分页查询介绍

1 背景概述 由于在项目中需要在页面上显示数量非常多的数据, 在进行数据库查询时首先会把所有的数据都查询出来,然后在进行显示,这时候分页查询的操作就必不可少了,本文介绍Mysql、Oracl...

数通畅联
2015/11/26
228
0
Java程序员的日常——存储过程知识普及

存储过程是保存可以接受或返回用户提供参数的SQL语句集合。在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装。可以在数据库中定义子程序,然后把子程序...

青夜之衫
2017/12/05
0
0
实现小数据量和海量数据的通用分页显示存储过程

建立一个web 应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页...

五味格子
2011/05/11
34
0
Num58 Oracle总结

表空间: 安装一个oracle,只有一个数据库。 ORACLE数据库的逻辑单元。 数据库---表空间 一个表空间可以与多个数据文件(物理结构)关联 一个数据库下可以建立多个表空间,一个表空间可以建立...

萧小蚁
2016/06/24
48
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部