ASP.NET和MSSQL高性能分页

首先是存储过程,只取出我需要的那段数据,如果页数超过数据总数,自动返回最后一页的纪录:setANSI_NULLSONsetQUOTED_IDENTIFIERONGO–===========

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

首先是存储过程,只取出我需要的那段数据,如果页数超过数据总数,自动返回最后一页的纪录:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Clear
-- Create date: 2007-01-30
-- Description: 高性能分页
-- http://www.cnblogs.com/roucheng/
-- =============================================
Alter PROCEDURE [dbo].[Tag_Page_Name_Select]
-- 传入最大显示纪录数和当前页码
    @MaxPageSize int,
    @PageNum int,
-- 设置一个输出参数返回总纪录数供分页列表使用
    @Count int output
AS
BEGIN
    SET NOCOUNT ON;

  DECLARE
-- 定义排序名称参数
        @Name nvarchar(50),
-- 定义游标位置
        @Cursor int
-- 首先得到纪录总数
  Select @Count = count(tag_Name)
    FROM [viewdatabase0716].[dbo].[view_tag];
-- 定义游标需要开始的位置
    Set @Cursor = @MaxPageSize*(@PageNum-1)+1
-- 如果游标大于纪录总数将游标放到最后一页开始的位置
    IF @Cursor > @Count
    BEGIN
-- 如果最后一页与最大每次纪录数相等,返回最后整页
        IF @Count % @MaxPageSize = 0
        BEGIN
            IF @Cursor > @MaxPageSize
                Set @Cursor = @Count - @MaxPageSize + 1
            ELSE
                Set @Cursor = 1
        END
-- 否则返回最后一页剩下的纪录
        ELSE
            Set @Cursor = @Count - (@Count % @MaxPageSize) + 1
    END
-- 将指针指到该页开始
    Set Rowcount @Cursor
-- 得到纪录开始的位置
    Select @Name = tag_Name
    FROM [viewdatabase0716].[dbo].[view_tag]
    orDER BY tag_Name;
-- 设置开始位置
    Set Rowcount @MaxPageSize
-- 得到该页纪录
        Select * 
        From [viewdatabase0716].[dbo].[view_tag]
        Where tag_Name >= @Name
        order By tag_Name

    Set Rowcount 0
END

然后是分页控件(… 为省略的生成HTML代码方法):

  1 using System.Data;
  2 using System.Configuration;
  3 using System.Web;
  4 using System.Web.Security;
  5 using System.Web.UI;
  6 using System.Web.UI.WebControls;
  7 using System.Web.UI.WebControls.WebParts;
  8 using System.Web.UI.HtmlControls;
  9 using System.Text;
 10 
 11 /// <summary>
 12 /// 扩展连接字符串
 13 /// </summary>
 14 public class ExStringBuilder
 15 {
 16     private StringBuilder InsertString;
 17     private StringBuilder PageString;
 18     private int PrivatePageNum = 1;
 19     private int PrivateMaxPageSize = 25;
 20     private int PrivateMaxPages = 10;
 21     private int PrivateCount;
 22     private int PrivateAllPage;
 23     public ExStringBuilder()
 24     {
 25         InsertString = new StringBuilder("");
 26     }
 27     /// <summary>
 28     /// 得到生成的HTML
 29     /// </summary>
 30     public string GetHtml
 31     {
 32         get
 33         {
 34             return InsertString.ToString();
 35         }
 36     }
 37     /// <summary>
 38     /// 得到生成的分页HTML
 39     /// </summary>
 40     public string GetPageHtml
 41     {
 42         get
 43         {
 44             return PageString.ToString();
 45         }
 46     }
 47     /// <summary>
 48     /// 设置或获取目前页数
 49     /// </summary>
 50     public int PageNum
 51     {
 52         get
 53         {
 54             return PrivatePageNum;
 55         }
 56         set
 57         {
 58             if (value >= 1)
 59             {
 60                 PrivatePageNum = value;
 61             }
 62         }
 63     }
 64     /// <summary>
 65     /// 设置或获取最大分页数
 66     /// </summary>
 67     public int MaxPageSize
 68     {
 69         get
 70         {
 71             return PrivateMaxPageSize;
 72         }
 73         set
 74         {
 75             if (value >= 1)
 76             {
 77                 PrivateMaxPageSize = value;
 78             }
 79         }
 80     }
 81     /// <summary>
 82     /// 设置或获取每次显示最大页数
 83     /// </summary>
 84     public int MaxPages
 85     {
 86         get
 87         {
 88             return PrivateMaxPages;
 89         }
 90         set
 91         {
 92             PrivateMaxPages = value;
 93         }
 94     }
 95     /// <summary>
 96     /// 设置或获取数据总数
 97     /// </summary>
 98     public int DateCount
 99     {
100         get
101         {
102             return PrivateCount;
103         }
104         set
105         {
106             PrivateCount = value;
107         }
108     }
109     /// <summary>
110     /// 获取数据总页数
111     /// </summary>
112     public int AllPage
113     {
114         get
115         {
116             return PrivateAllPage;
117         }
118     }
119     /// <summary>
120     /// 初始化分页
121     /// </summary>
122     public void Pagination()
123     {
124         PageString = new StringBuilder("");
125 //得到总页数
126         PrivateAllPage = (int)Math.Ceiling((decimal)PrivateCount / (decimal)PrivateMaxPageSize);
127 //防止上标或下标越界
128         if (PrivatePageNum > PrivateAllPage)
129         {
130             PrivatePageNum = PrivateAllPage;
131         }
132 //滚动游标分页方式
133         int LeftRange, RightRange, LeftStart, RightEnd;
134         LeftRange = (PrivateMaxPages + 1) / 2-1;
135         RightRange = (PrivateMaxPages + 1) / 2;
136         if (PrivateMaxPages >= PrivateAllPage)
137         {
138             LeftStart = 1;
139             RightEnd = PrivateAllPage;
140         }
141         else
142         {
143             if (PrivatePageNum <= LeftRange)
144             {
145                 LeftStart = 1;
146                 RightEnd = LeftStart + PrivateMaxPages - 1;
147             }
148             else if (PrivateAllPage - PrivatePageNum < RightRange)
149             {
150                 RightEnd = PrivateAllPage;
151                 LeftStart = RightEnd - PrivateMaxPages + 1;
152             }
153             else
154             {
155                 LeftStart = PrivatePageNum - LeftRange;
156                 RightEnd = PrivatePageNum + RightRange;
157             }
158         }
159 
160 //生成页码列表统计
161         PageString.Append(...);
162 
163         StringBuilder PreviousString = new StringBuilder("");
164 //如果在第一页
165         if (PrivatePageNum > 1)
166         {
167             ...
168         }
169         else
170         {
171             ...
172         }
173 //如果在第一组分页
174         if (PrivatePageNum > PrivateMaxPages)
175         {
176             ...
177         }
178         else
179         {
180             ...
181         }
182         PageString.Append(PreviousString);
183 //生成中间页 http://www.cnblogs.com/roucheng/
184         for (int i = LeftStart; i <= RightEnd; i++)
185         {
186 //为当前页时
187             if (i == PrivatePageNum)
188             {
189                 ...
190             }
191             else
192             {
193                 ...
194             }
195         }
196         StringBuilder LastString = new StringBuilder("");
197 //如果在最后一页
198         if (PrivatePageNum < PrivateAllPage)
199         {
200             ...
201         }
202         else
203         {
204             ...
205         }
206 //如果在最后一组
207         if ((PrivatePageNum + PrivateMaxPages) < PrivateAllPage)
208         {
209             ...
210         }
211         else
212         {
213             ...
214         }
215         PageString.Append(LastString);
216     }
217     /// <summary>
218     /// 生成Tag分类表格
219     /// </summary>
220     public void TagTable(ExDataRow myExDataRow)
221     {
222         InsertString.Append(...);
223     }

调用方法:

 1 //得到分页设置并放入Session
 2         ExRequest myExRequest = new ExRequest();
 3         myExRequest.PageSession("Tag_", new string[] { "page", "size" });
 4 //生成Tag分页
 5         ExStringBuilder Tag = new ExStringBuilder();
 6         //设置每次显示多少条纪录
 7         Tag.MaxPageSize = Convert.ToInt32(Session["Tag_size"]);
 8         //设置最多显示多少页码
 9         Tag.MaxPages = 9;
10         //设置当前为第几页
11         Tag.PageNum = Convert.ToInt32(Session["Tag_page"]);
12         string[][] myNamenValue = new string[2][]{
13             new string[]{"MaxPageSize","PageNum","Count"},
14             new string[]{Tag.MaxPageSize.ToString(),Tag.PageNum.ToString()}
15         };
16 //调用存储过程
17         DataTable myDataTable = mySQL.BatchGetDB("Tag_Page_Name_Select", myNamenValue, "Count");
18         Tag.DateCount = (int)mySQL.OutputCommand.Parameters["@Count"].Value;
19         Tag.Pagination();
20 
21         HeadPage.InnerHtml = FootPage.InnerHtml = Tag.GetPageHtml;
22 
23         for (int i = 0, j = myDataTable.Rows.Count; i < j; i++)
24         {
25             Tag.TagTable(new ExDataRow(myDataTable.Rows));
26         }
27         TagBox.InnerHtml = Tag.GetHtml;

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120733.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 可执行文件的组成

    可执行文件的组成在ADS下,可执行文件有两种,一种是.axf文件,带有调试信息,可供AXD调试工具使用.另一种是.bin文件,可执行的二进制代码文件。我们重点是讲描.bin文件的组成。我们把可执行文件

    2022年8月2日
    6
  • 【摘录】不借助第三个变量进行交换

    【摘录】不借助第三个变量进行交换

    2021年9月1日
    56
  • 安卓中activity的生命周期_activity生命周期方法

    安卓中activity的生命周期_activity生命周期方法当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。

    2022年8月16日
    7
  • shopee东南亚电商ERP系统[通俗易懂]

    shopee东南亚电商ERP系统[通俗易懂]【上马ERP】专注东南亚本地电商市场,对接shopeeLazadatokopediaJD.idBilbilAkulaku等电商平台一套根据东南亚本地电商需求深度订制的ERP/WMS仓储系统!上马特色功能:【自动处理pickupGo-jek,Gosend,Grad订单】【自动打印快递面单】:美观、高效、准确、效率【自动更新平台订单】:结合仓库现有库存,自动更新平台库存,100%防止超卖;【智能化仓库管理】:智能生成拣货清单,高效准确管理仓库;【实时校验订…

    2022年9月20日
    2
  • HADOOP生态圈简介

    HADOOP生态圈简介1.hadoop生态概况Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。Hadoop的核心是YARN,HDFS和Mapreduce下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与s…

    2022年5月22日
    39
  • 短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」

    短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」“比特币又跳水了。”  “那还有回暖的机会吗?”  最近这段时间,相信因为数字货币价格集体跳水而感到恐慌的,不止是炒币的投机客,还有大量“矿工”。  在过去一年多时间里,区块链逐渐变为人人热议的亲民话题,“挖矿”也成为很多人热议的火爆职业。甚至有金融界、互联网公司金领不惜放弃高薪,转型成为比特币“矿工”。  在过去的大半年时间里,比特币等数字货币也经历过几次不同程度的震荡。在遭遇价格上的大起大落之…

    2022年5月6日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号