ASP.NET GridView 使用Oracle Procedure 分頁

ASP.NET GridView 使用Oracle Procedure 分頁

1.創建Procedure(P_QUERYSPLIT)

 CREATE OR REPLACE PROCEDURE ZSHR.P_QUERYSPLIT(
 SQLSCRIPT IN VARCHAR2,PAGESIZE IN NUMBER,PAGEINDEX IN NUMBER,
 TOTALCOUNT OUT NUMBER,TOTALPAGE OUT NUMBER,V_CUR OUT SYS_REFCURSOR)IS
 v_PageIndex number;
 v_SQL_Count varchar2(4000);
 v_SQL varchar2(4000);
 v_StartIndex number :=1;
 v_EndIndex number :=1;

/******************************************************************************
   NAME:       P_QUERYSPLIT
   PURPOSE:   

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        2009/3/27          1. Created this procedure.

   NOTES:

   Automatically available Auto Replace Keywords:
      Object Name:     P_QUERYSPLIT
      Sysdate:         2009/3/27
      Date and Time:   2009/3/27, 上午 08:10:51, and 2009/3/27 上午 08:10:51
      Username:         (set in TOAD Options, Procedure Editor)
      Table Name:       (set in the "New PL/SQL Object" dialog)

******************************************************************************/
BEGIN
  v_SQL_Count := 'SELECT COUNT(*) FROM ('|| SQLSCRIPT ||') A ';
  EXECUTE IMMEDIATE v_SQL_Count INTO TOTALCOUNT;

  TOTALPAGE := CEIL(TOTALCOUNT/PAGESIZE);
  v_PageIndex := PAGEINDEX;
  IF v_PageIndex > TOTALPAGE THEN
     v_PageIndex := TOTALPAGE;
  END IF;

  v_StartIndex := (v_PageIndex - 1) * PAGESIZE + 1;
  v_EndIndex := v_PageIndex * PAGESIZE;

  v_SQL:= 'SELECT * FROM (';
  v_SQL:= v_SQL||' SELECT A.*, ROWNUM RN ';
  v_SQL:= v_SQL||' FROM ('|| SQLSCRIPT ||') A ';
  v_SQL:= v_SQL||' WHERE ROWNUM <= '|| v_EndIndex;
  v_SQL:= v_SQL||') WHERE RN >= '|| v_StartIndex;
 
  OPEN V_CUR for v_SQL;
  --DBMS_OUTPUT.PUT_LINE(v_SQL);
   EXCEPTION
     --WHEN NO_DATA_FOUND THEN
     --  NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       --RAISE;
       TOTALCOUNT := 0;
       TOTALPAGE := 0;
END P_QUERYSPLIT;

 

2.ASP.NET創建立方法,返回DataTable

        /// <summary>
        /// Oracle Procedure分頁,返回DataTable,總記錄筆數,總頁碼數
        /// </summary>
        /// <param name="strSQL">傳入Table or SQL</param>
        /// <param name="iPageSize">每頁顯示記錄數</param>
        /// <param name="iPageIndex">當前頁碼</param>
        /// <param name="iTotalCount">總記錄筆數</param>
        /// <param name="iTotalPage">總頁碼數</param>
        /// <returns>DataTable,總記錄筆數,總頁碼數</returns>
        public DataTable ExecuteDataTable(string strSQL,int iPageSize,int iPageIndex, out int iTotalCount,out int iTotalPage)
        {
            string spName = "P_QUERYSPLIT";
            OracleConnection conn = new OracleConnection(strConn);
            OracleCommand cmd = new OracleCommand(spName, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            OracleParameter SQLSCRIPT_IN = new OracleParameter("SQLSCRIPT", OracleType.VarChar);
            SQLSCRIPT_IN.Direction = ParameterDirection.Input;
            SQLSCRIPT_IN.Value = strSQL;
            cmd.Parameters.Add(SQLSCRIPT_IN);

            OracleParameter PAGESIZE_IN = new OracleParameter("PAGESIZE", OracleType.Number);
            PAGESIZE_IN.Direction = ParameterDirection.Input;
            PAGESIZE_IN.Value = iPageSize;
            cmd.Parameters.Add(PAGESIZE_IN);

            OracleParameter PAGEINDEX_IN = new OracleParameter("PAGEINDEX", OracleType.Number);
            PAGEINDEX_IN.Direction = ParameterDirection.Input;
            PAGEINDEX_IN.Value = iPageIndex;
            cmd.Parameters.Add(PAGEINDEX_IN);

            OracleParameter TOTALCOUNT_OUT = new OracleParameter("TOTALCOUNT", OracleType.Number);
            TOTALCOUNT_OUT.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(TOTALCOUNT_OUT);

            OracleParameter TOTALPAGE_OUT = new OracleParameter("TOTALPAGE", OracleType.Number);
            TOTALPAGE_OUT.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(TOTALPAGE_OUT);

            OracleParameter V_CUR_OUT = new OracleParameter("V_CUR", OracleType.Cursor);
            V_CUR_OUT.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(V_CUR_OUT);

            OracleDataAdapter da = new OracleDataAdapter(cmd);
            DataTable dt = new DataTable();

            try
            {
                conn.Open();
                da.Fill(dt);
            }
            catch (Exception e)
            {
                string msg = e.Message;
                Logs.Save("ExecuteDataTable() Error," + spName + "|" + msg);
            }
            finally
            {
                iTotalCount = int.Parse(TOTALCOUNT_OUT.Value.ToString());
                iTotalPage = int.Parse(TOTALPAGE_OUT.Value.ToString());

                if (conn.State == ConnectionState.Open)
                    conn.Close();
            }
            return dt;
        }

 

3.ASP.NET頁Bind到GrdiView並實現分頁  

    private int iTotalCount; //總記錄筆數
    private int iTotalPage; //總頁碼數
    private int iPageIndex; //當前頁碼
    private int iPageSize = 10; //每頁顯示記錄數

 

    protected void Button1_Click(object sender, EventArgs e)
    {
        bind();
    }
    protected void GridView1_DataBound(object sender, EventArgs e)
    {
        PageDropDownList.Items.Clear();
        for (int i = 0; i < iTotalPage; i++)
        {
            int pageNumber = i + 1;
            ListItem item = new ListItem(pageNumber.ToString());
            if (i == iPageIndex-1)
            {
                item.Selected = true;
            }
            PageDropDownList.Items.Add(item);
        }
       
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            int iID = (iPageIndex - 1) * iPageSize + i + 1;
            GridView1.Rows[i].Cells[0].Text = iID.ToString();
        }
    }
    protected void PageDropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        bind();
    }

    private void bind()
    {
        DLL.DAL.DataAccess myGet = new DLL.DAL.DataAccess();
        DataTable dt = new DataTable();

        iPageIndex = PageDropDownList.SelectedIndex < 1 ? 1 : PageDropDownList.SelectedIndex+1;

        string strSQL = "SELECT * FROM TABLENAME ORDER BY ID DESC,SEQ ASC";
        dt = myGet.ExecuteDataTable(strSQL, iPageSize, iPageIndex, out iTotalCount, out iTotalPage);
        //Response.Write("[" + iTotalPage + " / " + iTotalCount + "]");
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值