ASP.NET查询分页技术:实现Web数据分页浏览

开发 后端
通过ASP.NET查询分页技术可将其按照一定规则分成多页进行显示,每页显示一定数目记录。应用数据记录分页技术,可以提高数据的查询性能及页面的显示速度,减轻数据库服务器的负担。

利用ASP.NET开发Web数据库的查询功能模块时,为了减少网络流量,提高页面的访问速度,一般不会将所有的查询结果完全在一页中显示出来,而是将其按照一定规则分成多页进行显示,每页显示一定数目记录。应用数据记录分页技术,可以提高数据的查询性能及页面的显示速度,减轻数据库服务器的负担。


1 ASP.NET查询分页技术概述
 对Web数据库查询结果进行分页显示主要有两种实现方式,分别是浏览器端分页和服务器端分页。浏览器端分页是先将数据库中所有满足查询条件的记录一次性保存下来,然后通过设置每页要显示的记录数,再确定要显示记录的起点和终点来实现分页显示。服务器端分页是根据用户的请求,每次分别从满足查询条件的记录中将规定数目的记录数作读取并显示出来。
 为此,我们采用服务器端分页的方式。在浏览器端进行分页时,为了减少网络的流量,我们采用SQL Server的存储过程进行分页。


2  主要技术
ADO.NET类
在Web应用系统中,ASP.NET使用ADO.NET将系统前端的Web浏览器和后台的数据库之间联系起来。ADO.NET是.NET Framework提供的一系列类,提供了对关系数据、XML和应用程序数据的访问。

3  ASP.NET查询分页技术的实现
 在此,我们使用System.data.SqlClient(包含访问SQL Server数据库的类)对MS SQL Server2000进行操作,使用ASP.NET中的C#语言进行描述。以笔者开发的“在线考试系统”中的“查看学生留言信息模块”为例来说明该项技术的开发过程。

3.1连接数据库
 要访问数据,必须首先连接数据库,在此我们利用System.data.SqlClient.SqlConnection类来连接SQL Server中Student的数据库。用到主要属性和方法如下:
 
ConnectionString
 获取或设置用于打开SQL Server数据库的字符串
 
Open
 使用ConnectionString所指定的属性设置打开数据库连接
 
Close
 关闭与数据库的连接

连接字符串如下:

  1. SqlConnection SCN = new SqlConnection("server=;database=BSNetExam;uid=sa;pwd=");   

3.2 存储过程的建立

  1. CREATE PROCEDURE PageCut     
  2.     
  3.     @PageSize int=10 , -- 页面大小     
  4.     
  5.     @PageIndex int=1  --当前页数     
  6.     
  7. AS    
  8.     
  9.     declare  @strSQL varchar(500)     
  10.     
  11.     if @PageIndex=1     
  12.     
  13.         set  @strSQL='select top'+str(@PageSize)+'* from tdbLevMess order by rqsj'    
  14.     
  15.     else      
  16.     
  17.         set  @strSQL='select top'+str(@PageSize)+'  * from tdbLevMess where rqsj not in    
  18.     
  19.         (select top  '+str((@PageIndex-1)*@PageSize)+'  rqsj from tdbpres)  order by rqsj'      
  20.     
  21.     exec(@strSQL)     
  22.     
  23. GO   

3.3操作数据库

查询数据操作可以通过多种方式来实现,常用的对象包括SqlCommand对象(表示一个SQL查询或者一个存储过程)和SqlDataAdpater对象(把一个SqlCommand提交给SQL Server数据库)。在此,我们使用SqlCommand对象来操作数据库。

SqlCommand类位于System.Data.SqlClient空间中,表示要对SQL Server数据库执行的一个Transact-SQL语句或存储过程。本例中用到的属性和方法如下:


CommandText
 获取或设置要对数据源执行的 Transact-SQL 语句或存储过程。
 
CommandType
 获取或设置一个值,该值指示如何解释 CommandText 属性。
 
Connection
 获取或设置 SqlCommand 的此实例使用的 SqlConnection。
 
Parameters
 获取 SqlParameterCollection。
 
ExecuteReader
 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。
 

SqlParameter类位于System.Data.SqlClient空间中,表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。本例中用到的Value属性(获取或设置该参数的值)。

其实现程序如下:

  1. SqlCommand SCM=new SqlCommand();  //定义SqlCommand类     
  2.     
  3. SqlDataReader SDR;  //定义SqlDataReader类     
  4.     
  5. private void GridView_Init(int PageSize,int PageIndex)     
  6.     
  7. {     
  8.     
  9.     SCN.Open(); //打开数据库连接     
  10.     
  11.     SCM.Connection = SCN;     
  12.     
  13.     SCM.CommandText = "pagecut"; //执行存储过程     
  14.     
  15.     SCM.CommandType = CommandType.StoredProcedure;     
  16.     
  17.     SqlParameter[] pares ={ new SqlParameter("@PageSize",SqlDbType.Int),     
  18.     
  19.     new SqlParameter("@PageIndex",SqlDbType.Int)};     
  20.     
  21.     pares[0].Value = PageSize;     
  22.     
  23.     pares[1].Value = PageIndex;     
  24.     
  25.     SCM.Parameters.Clear(); //清空参数     
  26.     
  27.     foreach (SqlParameter parameter in pares)     
  28.     
  29.     {     
  30.     
  31.         SCM.Parameters.Add(parameter);     
  32.     
  33.     }     
  34.     
  35.     SDR = SCM.ExecuteReader(); //执行存储过程     
  36.     
  37.     GridView1.DataSource = SDR;  //定义GridView的数据源     
  38.     
  39.     GridView1.DataBind(); // GridView数据源绑定     
  40.     
  41.     SCN.Close(); //关闭连接     
  42.     
  43. }   

3.4 程序的实现

    在Web窗体上,添加一个GridView控件(用于数据的显示),四个LinkButton(用作超级链接,分别为首页、上一页、下一页、末页),一个Label控件。将GridView控件的AllowPaging(是否在GridView中打开分页功能)属性设置为False。我们利用Session对象保存分页程序中的参数。具体程序如下:

  1. protected void Page_Load(object sender, EventArgs e)     
  2.     
  3.     {//页面初始化     
  4.     
  5.         if (!IsPostBack)  //如果页面不是***次加载     
  6.     
  7.         {     
  8.     
  9.             int PageCount,PageIndex,PageSize; //定义页面总数、当前页面号、每页记录数     
  10.     
  11.             SCN.Open();     
  12.     
  13.             SCM.CommandText = "select count(*) from tdbLevMess ";     
  14.     
  15.             SCM.Connection = SCN;     
  16.     
  17.             int ReCount = Convert.ToInt32(SCM.ExecuteScalar().ToString());//数据集记录总数     
  18.     
  19.             SCN.Close();     
  20.     
  21.             Session.Add("PageSize", 20); //为共享变量每页记录数PageSize赋值     
  22.     
  23.             PageSize = Convert.ToInt16(Session["PageSize"]);//每页记录数为20     
  24.     
  25.             PageCount=ReCount % PageSize == 0? ReCount / PageSize: ReCount / PageSize + 1;//计算页面的总页数     
  26.     
  27.             Session.Add("PageCount", PageCount); //为共享变量总页数PageCount赋值     
  28.     
  29.             PageIndex = 1;     
  30.     
  31.             Session.Add("PageIndex", PageIndex); //为共享变量总页数PageIndex赋值     
  32.     
  33.             GridView_Init (PageSize, PageIndex); //调用过程为GridView填充数据     
  34.     
  35.             LinkButton1.Enabled = falseLinkButton2.Enabled = false;     
  36.     
  37.             LinkButton3.Enabled = true,LinkButton4.Enabled = true;     
  38.     
  39.             Label1.Text = "第"+PageIndex.ToString() + "页/共" + PageCount.ToString() + "页";     
  40.     
  41.         }     
  42.     
  43.     }     
  44.     
  45.   protected void LinkButton2_Click(object sender, EventArgs e)     
  46.     
  47.     {//上一页按钮     
  48.     
  49.         int PageIndex = Convert.ToInt16( Session["PageIndex"] )- 1;     
  50.     
  51.         int PageCount = Convert.ToInt16( Session["PageCount"]);     
  52.     
  53.         Session.Add("PageIndex", PageIndex);     
  54.     
  55.         int PageSize = Convert.ToInt16(Session["PageSize"]);     
  56.     
  57.         if (PageIndex <  = 1)     
  58.     
  59.         {     
  60.     
  61.             LinkButton1.Enabled = false;     
  62.     
  63.             LinkButton2.Enabled = false;     
  64.     
  65.         }     
  66.     
  67.         LinkButton3.Enabled = true;     
  68.     
  69.         LinkButton4.Enabled = true;     
  70.     
  71.         GridView_Init(PageSize, PageIndex);     
  72.     
  73.         Label1.Text = "第" + PageIndex.ToString() + "页/共" + PageCount.ToString() + "页";     
  74.     
  75.     }  

我们只给出了LinkButton2的代码(实现向上翻页),其它超级链接代码跟此相类似。

 4   结束语

ASP.NET查询分页技术是Web应用系统开发中经常遇到的重要工作,选择一种高效的查询分页技术,不仅能大大提高响应速度,而且能提高整个系统性能,节约服务器宝贵资源。

【编辑推荐】

  1. 介绍ASP.NET页面生命周期
  2. ASP.NET数据验证技术研究详解
  3. ASP.NET数据验证中的验证组浅析
  4. ASP.NET数据验证控件使用浅析
  5. ASP.NET数据验证五大常用控件浅析
责任编辑:周立方 来源: 唔愛吃蘋果
相关推荐

2010-03-19 09:17:16

ASP.NET MVC

2009-07-22 16:02:39

ASP.NET MVCPagedList

2012-04-23 15:10:18

ASP.NET

2009-07-28 14:47:18

ASP.NET MVC

2009-11-06 09:23:41

ASP.NET高效分页

2009-09-10 09:50:47

ASP.NET MVC

2012-04-13 10:05:24

ASP.NET

2009-08-12 14:10:37

asp.net分页代码

2009-08-12 18:19:46

ASP.NET报表打印

2009-08-14 13:20:29

ASP.NET Gri

2009-08-04 14:36:00

ASP.NET分页管理

2009-08-14 13:37:25

ASP.NET静态页面

2011-04-29 13:23:11

分页数据存储

2010-08-02 09:18:39

ASP.NET MVC

2009-08-12 14:38:05

ASP.NET Dat

2010-01-26 13:15:42

ASP.NET MVC

2015-08-19 14:18:56

SQLasp.net后台调用

2009-04-09 09:51:09

ASP.NETSQL Server 自定义分页

2012-09-25 09:31:58

ASP.NETC#Web

2009-07-30 11:39:04

ASP.NET新技术
点赞
收藏

51CTO技术栈公众号