电竞比分网-中国电竞赛事及体育赛事平台

分享

ASP.NET調(diào)用Oracle分頁(yè)存儲(chǔ)過(guò)程并結(jié)合ASPnetpager分頁(yè)控件 實(shí)現(xiàn)分頁(yè)功能

 昵稱(chēng)10504424 2013-02-18

之前用的是GridView自帶的分頁(yè)功能,那速度啊慢的真實(shí)不行 ,決定自定義分頁(yè) Oracle庫(kù)里有5W多條數(shù)據(jù)

AspnetPager做的還是不錯(cuò),拿過(guò)來(lái)用

Oracle 分頁(yè)存儲(chǔ)過(guò)程:

create or replace package JT_P_page is
type type_cur is ref cursor;                    --定義游標(biāo)變量用于返回記錄集
procedure Pagination (Pindex in number,        --要顯示的頁(yè)數(shù)索引,從0開(kāi)始
                       Psql in varchar2,        --產(chǎn)生分頁(yè)數(shù)據(jù)的查詢(xún)語(yǔ)句
                       Psize in number,         --每頁(yè)顯示記錄數(shù)
                       Pcount out number,       --返回的分頁(yè)數(shù)
                       Prowcount out number,    --返回的記錄數(shù)
                       v_cur out type_cur      --返回分頁(yè)數(shù)據(jù)的游標(biāo)
                       );
end JT_P_page;
--定義包主體
create or replace package body JT_P_page is
procedure Pagination(Pindex in number, --要顯示的頁(yè)數(shù)索引,從0開(kāi)始
                       Psql in varchar2, --產(chǎn)生分頁(yè)數(shù)據(jù)的查詢(xún)語(yǔ)句
                       Psize in number, --每頁(yè)顯示記錄數(shù)
                       Pcount out number, --返回的分頁(yè)數(shù)
                       Prowcount out number, --返回的記錄數(shù)
                       v_cur out type_cur --返回分頁(yè)數(shù)據(jù)的游標(biāo)
                       ) AS
    v_sql VARCHAR2(1000);
    v_Pbegin number;
    v_Pend number;
begin
    v_sql := 'select count(*) from (' || Psql || ')';
    execute immediate v_sql into Prowcount; --計(jì)算記錄總數(shù)
    Pcount := ceil(Prowcount / Psize); --計(jì)算分頁(yè)總數(shù)
    --顯示任意頁(yè)內(nèi)容
    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;

這個(gè)是在網(wǎng)上找的,還不錯(cuò) 主要是根據(jù)偽列 rownum作為where查詢(xún)條件 進(jìn)行帥選,關(guān)于rownum偽列可以查看

http://www.cnblogs.com/chinhr/archive/2007/09/30/911685.html 寫(xiě)的很透徹 ,通過(guò)這次做這個(gè)Oracle分頁(yè)算是對(duì)rownum有了初步的認(rèn)識(shí),實(shí)踐出真理 , 有了存儲(chǔ)過(guò)程截下來(lái)就是調(diào)用

存儲(chǔ)過(guò)程有6個(gè)參數(shù) 前三個(gè)是輸入?yún)?shù),后三個(gè)是輸出參數(shù)

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;
    }

注意一下再調(diào)用的時(shí)候 參數(shù)名必須和存儲(chǔ)過(guò)程中的參數(shù)保持一致 否則可能會(huì)報(bào)錯(cuò) 例如:new OracleParameter("Pindex",OracleType.Number) 中的 Pindex 和存儲(chǔ)過(guò)程procedure Pagination (Pindex in number 中的一樣,Aspnetpage作為一個(gè)第三方控件,直接從網(wǎng)上下載后 在VS2005工具欄里把.dll導(dǎo)進(jìn)去 就可以拿來(lái)用了 前臺(tái)頁(yè)面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 = "記錄總數(shù):<font color=/"blue/"><b>" + AspNetPager1.RecordCount.ToString() + "</b></font>";  
        AspNetPager1.CustomInfoHTML += " 總頁(yè)數(shù):<font color=/"blue/"><b>" + AspNetPager1.PageCount.ToString() + "</b></font>";  
        AspNetPager1.CustomInfoHTML += " 當(dāng)前頁(yè):<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 的申明 以及一些屬性的設(shè)置 這個(gè)網(wǎng)上可以搜的倒

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

我做了一下測(cè)試,用存儲(chǔ)過(guò)程分頁(yè)比原來(lái)GridView自帶的分頁(yè)效率提高了不止一倍 ,時(shí)間只有原來(lái)的一半不到

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/zkvistor/archive/2009/08/30/4497305.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多