zoukankan      html  css  js  c++  java
  • top分页和row_number分页方法

    自己在用的分页方法,感觉性能还可以,如果大家有更好的方法可以交流一下。

        #region 生成分页的SQL语句 top方法
        /// <summary>
        /// 生成分页的SQL语句 top方法
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="whereString">条件语句</param>
        /// <param name="orderByString">排序列名</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="pageNumber">页号</param>
        /// <returns></returns>
        public string CreateSqlString_top(string tableName,string whereString,string orderByString,int pageSize,int pageNumber)
        { 
            //SELECT TOP 20 * FROM (
            //SELECT TOP 20 * FROM (
            //SELECT TOP (20*6) * FROM excel_gtcs ORDER BY id ASC) a 
            //ORDER BY a.id DESC) b ORDER BY b.id ASC
            int itemCount = CountTable(tableName, whereString);
            int countPage = itemCount / pageSize;
            int yushu = itemCount % pageSize;
            if (yushu > 0) countPage++;
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT TOP ").Append(pageSize).Append(" * FROM ( ");
            sb.Append(" SELECT TOP ").Append(pageSize).Append(" * FROM ( ");
            //
            sb.Append(" SELECT TOP (");
            if (countPage == pageNumber && yushu > 0) //最后一页,且余数大于0
            {
                sb.Append(yushu);
            }
            else
            {
                sb.Append(pageSize * pageNumber);
            }
            sb.Append(") * FROM ").Append(tableName).Append(" "); 
            if (!string.IsNullOrEmpty(whereString)) //如果有条件语句
            {
                sb.Append(" WHERE ").Append(whereString).Append(" ");
            }
            sb.Append(" ORDER BY ").Append(orderByString);
            if (countPage == pageNumber && yushu > 0) //最后一页,且余数大于0
            {
                sb.Append(" DESC) a "); //ORDER BY id DESC) a 
            }
            else
            {
                sb.Append(" ASC) a "); //ORDER BY id ASC) a 
            }
            sb.Append(" ORDER BY a.").Append(orderByString).Append(" DESC) b ORDER BY b.").Append(orderByString).Append(" ASC ");
            return sb.ToString();
        }
        #endregion
        #region 生成分页的SQL语句 row_number方法
        //SELECT row,* FROM(
        //SELECT ROW_NUMBER() OVER (ORDER BY id) AS row,* FROM excel_gtcs ) AS aaaa WHERE row>2000 AND row<2010
        /// <summary>
        /// 生成分页的SQL语句 row_number方法
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="whereString">条件语句</param>
        /// <param name="orderByString">排序列名</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="pageNumber">页号</param>
        /// <returns></returns>
        public string CreateSqlString_row(string tableName, string whereString, string orderByString, int pageSize, int pageNumber)
        {
            int beginItem = pageNumber==1 ? 0 : pageSize * (pageNumber-1);
            int endItem = pageNumber==1 ? pageSize : pageSize * pageNumber;
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT * FROM( ");
            sb.Append(" SELECT ROW_NUMBER() OVER (ORDER BY ").Append(orderByString).Append(") AS row,* FROM ").Append(tableName).Append(" ) AS aa WHERE row>").Append(beginItem).Append(" AND row<").Append(endItem).Append(" ");
            if (!string.IsNullOrEmpty(whereString))
            {
                sb.Append(" AND ").Append(whereString);
            }
            return sb.ToString();
        }
        #endregion
    #region 生成上下页链接
        /// <summary>
        /// 生成上下页链接
        /// </summary>
        /// <param name="pageName">当前页面名称</param>
        /// <param name="tableName">表名</param>
        /// <param name="whereString">条件</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="pageNumber">页号</param>
        /// <returns></returns>
        public string GridPager(string pageName,string tableName, string whereString, int pageSize, int pageNumber)
        {
            int itemCount = CountTable(tableName, whereString);
            int countPage = itemCount / pageSize;
            int yushu = itemCount % pageSize;
            if (yushu > 0) countPage++;
            StringBuilder sb = new StringBuilder();
            sb.Append(string.Format("总记录:{0} ", itemCount));
            sb.Append(string.Format("当前第 {0}/{1} 页 ", pageNumber,countPage));
            if (pageNumber > 1)
            {
                sb.Append(string.Format("<a href=\"{0}?pageNumber={1}&pageSize={2}\" >第一页</a> ", pageName, 1, pageSize));
                sb.Append(string.Format("<a href=\"{0}?pageNumber={1}&pageSize={2}\" >上一页</a> ", pageName, pageNumber - 1, pageSize));
            }
            else
            {
                sb.Append("<a href=\"#\" >第一页</a> ");
                sb.Append("<a href=\"#\" >上一页</a> ");
            }
            if (pageNumber >= countPage)
            {
                sb.Append("<a href=\"#\" >下一页</a> ");
                sb.Append("<a href=\"#\" >最末页</a> ");
            }
            else
            {
                sb.Append(string.Format("<a href=\"{0}?pageNumber={1}&pageSize={2}\" >下一页</a> ", pageName, pageNumber + 1, pageSize));
                sb.Append(string.Format("<a href=\"{0}?pageNumber={1}&pageSize={2}\" >最末页</a> ", pageName, countPage, pageSize));
            }
            return sb.ToString();
        }
        #endregion
        /// <summary>
        /// 统计表中记录总数
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="whereString"></param>
        /// <returns></returns>
        public int CountTable(string tableName, string whereString)
        {
            string strSQL = string.Format("SELECT COUNT(*) FROM {0} ", tableName);
            if (!string.IsNullOrEmpty(whereString))
            {
                strSQL += string.Format(strSQL + " WHERE {0} ", whereString);
            }
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                conn.Open();
                object temp = cmd.ExecuteScalar();
                conn.Close();
                if (temp != null)
                {
                    return int.Parse(temp.ToString());
                }
                else
                {
                    return 0;
                }
            }
        }
    public DataSet GridDs(string strSQL)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
        }

    HTML页代码

        <div>
        
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
        
        </div>
        <div id="pager" runat="server"></div>

    页面调用

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            int pageSize = Request.QueryString["pageSize"] == null ? 20 : int.Parse(Request.QueryString["pageSize"].ToString());
            int pageNumber = Request.QueryString["pageNumber"] == null ? 1 : int.Parse(Request.QueryString["pageNumber"].ToString());
            myGridPage mgp = new myGridPage();
            string sql = mgp.CreateSqlString_top("表名", "", "id", pageSize, pageNumber);
            //string sql = mgp.CreateSqlString_row("表名", "", "id", pageSize, pageNumber);
            Response.Write(sql);
            this.GridView1.DataSource = mgp.GridDs(sql);
            this.GridView1.DataBind();
    
            string pageName = Request.Url.AbsolutePath.ToString();
            this.pager.InnerHtml = mgp.GridPager(pageName, "excel_gtcs", "", pageSize, pageNumber);
            stopwatch.Stop();
            Response.Write(string.Format("<br>用时{0}毫秒",stopwatch.ElapsedMilliseconds));
  • 相关阅读:
    15.Git版本控制系统
    14.sudo 获取root权限
    13.定时任务
    12.文件权限:RWX
    相信301跳转大家都知道 rewrite
    修改mysql密码
    mod_rewrite是Apache的一个非常强大的功能
    mysql 常用命令集锦[绝对精华]
    mysql安装完之后,登陆后发现只有两个数据库
    mysql命令
  • 原文地址:https://www.cnblogs.com/taobox/p/2554813.html
Copyright © 2011-2022 走看看