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

来源:互联网 发布:alias linux 参数 编辑:程序博客网 时间:2024/06/04 19:45
--包头部分create or replace package JT_P_page istype 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 isprocedure 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);    }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 王者荣耀好多没对的东西怎么办 用电脑玩游戏键盘不管用怎么办? 王者荣耀跨系统送皮肤领不到怎么办 电脑使用迅雷时提示缓存过高怎么办 扣扣安全中心动态密码忘记了怎么办 pu管两头固定了中间换截怎么办 自己架设的传奇不能注册帐号怎么办 天堂2第八章读取服务端错误怎么办 苹果手机王者荣耀下了不能玩怎么办 苹果手机摔了一下触屏失灵怎么办 华为机回复出厂设置帐号忘了怎么办 华为手机里突然有个pp助手怎么办 华为手机与电脑连接不上怎么办 买房交了首付贷不了款怎么办 手机买贵了实体店不肯退怎么办 在实体店里手机买贵了怎么办 红米手机开启不了安装系统怎么办? 捡个荣耀8双清后要账号怎么办 荣耀7x升级8.0后耗电快怎么办 手机提示当前为耳机播放模式怎么办 华为手机进水了显示耳机模式怎么办 苹果6s突然变成耳机模式怎么办 华为手机出现耳机标志没声音怎么办 苹果手机微信变成耳机模式怎么办 5s不能用4g网络怎么办 华为麦芒四手机系统乱了好卡怎么办 信翼路由器登录密码忘了怎么办 苹果手机电信4g信号变3g怎么办 苹果7手机4g变3g怎么办 朵唯v3逆客手机不支持计步怎么办 移动卡升级4g后网络不好怎么办 电信办宽带送的手机卡不用了怎么办 移动华为悦盒遥控器丢了怎么办 移动签了两年套餐不想用了怎么办 华为手机隐私空间密码忘记了怎么办 华为的隐私空间密码忘记了怎么办 格力新机没密码开不了怎么办 百度下载谷歌浏览器网页错误怎么办 华为手机进水开不了机怎么办开 华为7x金属外壳掉漆了怎么办 华为麦芒6连接蓝牙音响卡顿怎么办