zoukankan      html  css  js  c++  java
  • sql server2005 分页特性

    在sql server 2005的新功能中,比较西黄分页功能,通过查询函数row_number over(order by field)实现是提取分页数据当页的记录,此功能原理上和临时表差不多,不过通过插叙语句操作就快捷多了,做了个demo,分页效果很好。
    1、新建一个default.aspx页面,内容很简单,就一个数据控件和一个分页导航标记条。
    <body>
        <form id="form1" runat="server">
        <div>
      <asp:DataGrid ID="datalist" runat="server"></asp:DataGrid>
      <asp:Label ID="pager" runat="server"></asp:Label>
        </div>
        </form>

    </body>

    2、在代码里,主要根据传送的参数去数据表里去当前页的记录,每次都只去一页的记录。

    protected void Page_Load(object sender, EventArgs e)
            {
                Bind();
            }
            
    //获取记录总数
            private int RowCount
            {
                
    get
                {
                    
    string connStr = ConfigurationManager.ConnectionStrings["connstr"].ToString();
                    SqlConnection conn 
    = new SqlConnection(connStr);
                    conn.Open();
                    
    string sqlStr = "select count(1) from tbl_MailList";
                    SqlDataAdapter ada 
    = new SqlDataAdapter(sqlStr, conn);
                    DataSet ds 
    = new DataSet();
                    ada.Fill(ds);
                    conn.Close();
                    
    return int.Parse(ds.Tables[0].Rows[0][0].ToString());
                }
            }
            
    //绑定数据
            private void Bind()
            {  
                
    //首页地址
                string url="default.aspx";
               
                
    //每页数量
                int size = 10;
                
    //总记录
                int TotalCount = RowCount;
                
    //开始记录
                int start=1;
                
    try
                {
                    start
    =int.Parse(Request.Params["start"].ToString());
                }
                
    catch
                {

                }
                
    //结束记录
                int end=size;
                
    try
                {
                    end
    =int.Parse(Request.Params["end"].ToString());
                }
                
    catch
                {
                }

                
    string connStr = ConfigurationManager.ConnectionStrings["connstr"].ToString();
                SqlConnection conn 
    = new SqlConnection(connStr);
                conn.Open();
                
    string sqlStr = "select * from (select *,row_number() over(order by AddrId) as row from tbl_maillist) as mail where row between "+start+" and "+end;
                SqlDataAdapter ada 
    = new SqlDataAdapter(sqlStr, conn);
                DataSet ds 
    = new DataSet();
                ada.Fill(ds);
                conn.Close();
                datalist.DataSource 
    = ds.Tables[0];
                datalist.DataBind();
                
    //当前页码
                int CurrentPage=1;
                
    try
                {
                    CurrentPage
    =int.Parse(Request.Params["CurrentPage"].ToString());
                }
                
    catch
                {
                }
                
    //分页数量
                int PageCount = TotalCount / size;
                
    if (TotalCount % size != 0)
                {
                    PageCount
    =PageCount+1;
                }
                
    //呈现页面导航
                StringBuilder sb = new StringBuilder();
                
    //只有1页
                if (PageCount < 2||CurrentPage == 1)
                {
                    sb.Append(
    "首页");
                    sb.Append(
    "&nbsp;&nbsp;上一页");
                }
                
    else
                {
                    sb.Append(
    "<a href="+url+"?start=1&end="+size+"&CurrentPage=1>首页</a>");
                    sb.Append(
    "&nbsp;&nbsp;<a href="+url+"?start="+((CurrentPage-2)*size+1+"&end="+ (CurrentPage-1)*size+"&CurrntPage="+(CurrentPage-1)+">上一页</a>");
                }
                
    //超过10页只显示10页
                if (PageCount > 10)
                {  
                    
    for (int intLoop = 1; intLoop < 11; intLoop++)
                    {
                        
    //当前页没有超连接
                        if (CurrentPage == intLoop)
                        {
                            sb.Append(
    "&nbsp;" + intLoop.ToString());
                        }
                        
    else
                        {
                            sb.Append(
    "&nbsp;<a href=" + url + "?start=" + ((intLoop - 1* size + 1+ "&end=" + (intLoop * size) + "&CurrentPage=" + intLoop + ">" + intLoop + "</a>");
                        }
                    }
                    sb.Append(
    "");
                }
                
    else
                {
                    
    for (int intLoop = 1; intLoop < PageCount + 1; intLoop++)
                    {
                        
    //当前页没有超连接
                        if (CurrentPage == intLoop)
                        {
                            sb.Append(
    "&nbsp;" + intLoop.ToString());
                        }
                        
    else
                        {
                            sb.Append(
    "&nbsp;<a href=" + url + "?start=" + ((intLoop - 1* size + 1+ "&end=" + (intLoop * size) + "&CurrentPage=" + intLoop + ">" + intLoop + "</a>");
                        }
                    }
                }
               
                
    if (PageCount < 2||CurrentPage==PageCount)
                {
                   
                    sb.Append(
    "&nbsp;&nbsp;下一页");
                    sb.Append(
    "&nbsp;&nbsp;末页");
                }
                
    else
                {
                    sb.Append(
    "&nbsp;&nbsp;<a href="+url+"?start="+((CurrentPage*size)+1)+"&end="+(CurrentPage+1)*size+"&CurrentPage="+(CurrentPage+1)+">下一页</a>");
                    sb.Append(
    "&nbsp;&nbsp;<a href="+url+"?start="+(((PageCount-1)*size)+1)+"&end="+PageCount*size+"&CurrentPage="+PageCount+">末页</a>");
                }

                pager.Text 
    = sb.ToString();
              
            }

      执行效果很快,适合大量数据的分页。

  • 相关阅读:
    Spring学习总结[1]-入门
    MyBatis学习总结[5]-动态 SQL
    MyBatis学习总结[4]-ResultMap子元素
    MyBatis学习总结[3]-多表查询
    MyBatis学习总结[2]-接口式调用
    MyBatis学习总结[1]-入门
    Bootstrap table两种分页示例
    spring ioc原理(看完后大家可以自己写一个spring)
    Junit4单元测试
    数字转换为字母有多少种方式
  • 原文地址:https://www.cnblogs.com/dfsxh/p/1287234.html
Copyright © 2011-2022 走看看