sql server2005 分页特性
生活随笔
收集整理的這篇文章主要介紹了
sql server2005 分页特性
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在sql server 2005的新功能中,比較西黃分頁功能,通過查詢函數(shù)row_number over(order by field)實現(xiàn)是提取分頁數(shù)據(jù)當頁的記錄,此功能原理上和臨時表差不多,不過通過插敘語句操作就快捷多了,做了個demo,分頁效果很好。
1、新建一個default.aspx頁面,內容很簡單,就一個數(shù)據(jù)控件和一個分頁導航標記條。
<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>
????????{
????????????Bind();
????????}
????????//獲取記錄總數(shù)
????????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());
????????????}
????????}
????????//綁定數(shù)據(jù)
????????private?void?Bind()
????????{??
????????????//首頁地址
????????????string?url="default.aspx";
???????????
????????????//每頁數(shù)量
????????????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
????????????{
????????????}
????????????//分頁數(shù)量
????????????int?PageCount?=?TotalCount?/?size;
????????????if?(TotalCount?%?size?!=?0)
????????????{
????????????????PageCount=PageCount+1;
????????????}
????????????//呈現(xiàn)頁面導航
????????????StringBuilder?sb?=?new?StringBuilder();
????????????//只有1頁
????????????if?(PageCount?<?2||CurrentPage?==?1)
????????????{
????????????????sb.Append("首頁");
????????????????sb.Append(" 上一頁");
????????????}
????????????else
????????????{
????????????????sb.Append("<a?href="+url+"?start=1&end="+size+"&CurrentPage=1>首頁</a>");
????????????????sb.Append(" <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(" "?+?intLoop.ToString());
????????????????????}
????????????????????else
????????????????????{
????????????????????????sb.Append(" <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(" "?+?intLoop.ToString());
????????????????????}
????????????????????else
????????????????????{
????????????????????????sb.Append(" <a?href="?+?url?+?"?start="?+?((intLoop?-?1)?*?size?+?1)?+?"&end="?+?(intLoop?*?size)?+?"&CurrentPage="?+?intLoop?+?">"?+?intLoop?+?"</a>");
????????????????????}
????????????????}
????????????}
???????????
????????????if?(PageCount?<?2||CurrentPage==PageCount)
????????????{
???????????????
????????????????sb.Append(" 下一頁");
????????????????sb.Append(" 末頁");
????????????}
????????????else
????????????{
????????????????sb.Append(" <a?href="+url+"?start="+((CurrentPage*size)+1)+"&end="+(CurrentPage+1)*size+"&CurrentPage="+(CurrentPage+1)+">下一頁</a>");
????????????????sb.Append(" <a?href="+url+"?start="+(((PageCount-1)*size)+1)+"&end="+PageCount*size+"&CurrentPage="+PageCount+">末頁</a>");
????????????}
????????????pager.Text?=?sb.ToString();
??????????
????????}
1、新建一個default.aspx頁面,內容很簡單,就一個數(shù)據(jù)控件和一個分頁導航標記條。
<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、在代碼里,主要根據(jù)傳送的參數(shù)去數(shù)據(jù)表里去當前頁的記錄,每次都只去一頁的記錄。
protected?void?Page_Load(object?sender,?EventArgs?e)????????{
????????????Bind();
????????}
????????//獲取記錄總數(shù)
????????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());
????????????}
????????}
????????//綁定數(shù)據(jù)
????????private?void?Bind()
????????{??
????????????//首頁地址
????????????string?url="default.aspx";
???????????
????????????//每頁數(shù)量
????????????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
????????????{
????????????}
????????????//分頁數(shù)量
????????????int?PageCount?=?TotalCount?/?size;
????????????if?(TotalCount?%?size?!=?0)
????????????{
????????????????PageCount=PageCount+1;
????????????}
????????????//呈現(xiàn)頁面導航
????????????StringBuilder?sb?=?new?StringBuilder();
????????????//只有1頁
????????????if?(PageCount?<?2||CurrentPage?==?1)
????????????{
????????????????sb.Append("首頁");
????????????????sb.Append(" 上一頁");
????????????}
????????????else
????????????{
????????????????sb.Append("<a?href="+url+"?start=1&end="+size+"&CurrentPage=1>首頁</a>");
????????????????sb.Append(" <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(" "?+?intLoop.ToString());
????????????????????}
????????????????????else
????????????????????{
????????????????????????sb.Append(" <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(" "?+?intLoop.ToString());
????????????????????}
????????????????????else
????????????????????{
????????????????????????sb.Append(" <a?href="?+?url?+?"?start="?+?((intLoop?-?1)?*?size?+?1)?+?"&end="?+?(intLoop?*?size)?+?"&CurrentPage="?+?intLoop?+?">"?+?intLoop?+?"</a>");
????????????????????}
????????????????}
????????????}
???????????
????????????if?(PageCount?<?2||CurrentPage==PageCount)
????????????{
???????????????
????????????????sb.Append(" 下一頁");
????????????????sb.Append(" 末頁");
????????????}
????????????else
????????????{
????????????????sb.Append(" <a?href="+url+"?start="+((CurrentPage*size)+1)+"&end="+(CurrentPage+1)*size+"&CurrentPage="+(CurrentPage+1)+">下一頁</a>");
????????????????sb.Append(" <a?href="+url+"?start="+(((PageCount-1)*size)+1)+"&end="+PageCount*size+"&CurrentPage="+PageCount+">末頁</a>");
????????????}
????????????pager.Text?=?sb.ToString();
??????????
????????}
? 執(zhí)行效果很快,適合大量數(shù)據(jù)的分頁。
轉載于:https://www.cnblogs.com/dfsxh/archive/2008/09/09/1287234.html
總結
以上是生活随笔為你收集整理的sql server2005 分页特性的全部內容,希望文章能夠幫你解決所遇到的問題。