时间:2022-10-05 06:33:49
摘要:本文讨论了一种使用存储过程实现高效的框架下对获取的数据实现分页显示的方法,并提出了其中应注意的细节问题,给出一个应用实例。
关键词:4.0;分页;存储过程
中图分类号:TP393 文献标识码:A文章编号:1007-9599 (2011) 09-0000-02
Grid View Control Efficient Paging Technology in 4.0
Zhang Sheng,Zhu Zhonggu,Fan Tanghe
(Huangshi Polytechnic,Department of Electronic and Information Engineering,Huangshi435000,China)
Abstract:Without smart and effective paging and sorting for huge amount of data,user request takes more time and uses more resources.The papter discussioned a method ofEffective paging,at last giving a practical example.
Keywords:4.0;Paging;Procedure
随着计算机技术的发展和普遍应用,人们的工作和学习越来越离不开网络,网络应用程序也越来越多。而大多数网络应用程序离不开数据的查询。在使用技术的网络应用程序中,利用GridView控件实现数据的分页显示是一项很简单的工作。但是如果开发一个大型的网络应用程序,需要分页显示的数据有成千上万条,如果还是直接使用GridView控件会极大得影响系统的运行效率。本文提出了一个使用存储过程来实现的更高效的分页方法,并讨论了实现的细节。
一、4.0简介
建立在的框架平台上,利用公共语言运行时库在服务器端为用户提供强大的企业级Web应用服务的编程框架。
采用了“事件-驱动”编程模型,它允许开发者创建一旦特定事件发生时就执行的代码。当加载、卸载或单击页面上的控件时,就会执行一段特定的代码。事件-驱动编程模型使编程更接近于Windows编程,开发者只须编写响应事件的代码,它们就可以将事件-驱动编程的知识从Windows桌面应用程序扩展到Web应用程序上来。事件-驱动编程模型的另一优点是它可以使处理数据的代码与向用户显示数据的代码相分离,使维护更容易。
在.NET Framework4.0版本之上,微软也了称为4.0的版本。4.0相对于早期的2.0在后台上并没有太大的改变,但是提供了大量的新功能,比如以前作为扩展的 AJAX、LINQ数据源控件等等。本文的4.0的实例是在VS2010开发坏境下开发的。
二、存储过程的编写
在SQL Server2005中建立一个表test如下:
列名 数据类型 允许空
序号 bigint 否
姓名 Nchar(10) 否
地址 nchar(50) 是
电话 varchar(15) 否
是否激活 bit 否
表1:test表结构
首先,直接配置GridView控件进行分页显示,方法如下:在上述表结构中添加十几条数据,再在VS2010中建立工程,其中GridView控件的设置如下:
AutoGenerateColumns="false"AllowPaging="true"AllowSorting="true"
PageSize="5"HeaderStyle-Font-Names="Verdana"Font-Size="Small"
HeaderStyle-HorizontalAlign="Left"
HeaderStyle-Font-Underline="false"Width="55%"
HeaderStyle-BackColor="BurlyWood"HeaderStyle-ForeColor="Navy">
Aquamarine">/>
SortExpression="ProfileId"ItemStyle-Width="6%"/>
SortExpression="Name"ItemStyle-Width="13%"/>
SortExpression="Address"ItemStyle-Width="18%"/>
SortExpression="Email"ItemStyle-Width="8%"/>
SortExpression="Mobile"ItemStyle-Width="9%"/>
SortExpression="IsActive"ItemStyle-Width="4%"/>
运行后可以看到,每页可以显示5行记录。
然而,当将test表中的数据添加到2000条时,页面的反应非常缓慢,数据很长时间不能显示。这是由于采用上述方式数据库中的数据是一次都取出来,所以占用内存过多,非常影响程序的性能。
经过分析与实验,本文提出用存储过程来控制每次显示页面需要提取的数据的方法。大大提高程序的性能。
在数据库中建立如下存储过程:
CREATE PROCEDURE[dbo].[test]
@PageSize int=null,
@CurrentPage int=null,
@SortExpression nvarchar(max)=null
AS
BEGIN
SET NOCOUNT ON
DECLARE @SqlString nvarchar(max)
Declare @UpperBand int
Declare @LowerBand int
SET @LowerBand=(@CurrentPage-1)*@PageSize
SET @UpperBand=(@CurrentPage*@PageSize)+1
BEGIN
SET@SqlString='WITH tempProfile AS
(
SELECT
[序号],
[姓名],
[地址],
[电话],
[是否激活]=CASE[是否激活]WHEN1_
THEN''Active''WHEN 0 THEN''DeActive''END,
ROW_NUMBER()OVER(ORDER BY'+_
@SortExpression+')AS RowNumber
FROM[dbo].[test]
)
SELECT
[序号],
[姓名],
[地址],
[电话],
[是否激活]
FROM
Temp Profile
WHERE
Row Number>'+CONVERT(VARCHAR,@Lower Band)+_
'AND Row Number
+'ORDER BY'+@Sort Expression
EXEC sp_executesql @SqlString
END
END
在这个存储过程中,输入参数@Page Size指页面记录数,@Current Page指当前显示第几页,@Sort Expression指数据排序规则。通过这个存储过程,每页显示数据是,需要显示几条数据,就显示几条数据,并不是将所有数据一并调出,采取这样的方式来提高程序运行的效率。
三、分页功能实现的实例
以下通过一个实例来演示如何调用上述存储过程。建立测试页面login_on.aspx,在编写login_on.cs代码时,数据库连接方式及取数据的方式采用存储过程test。具体代码如下所示:
….
SqlCommand cmdSelect=new SqlCommand();
conn.Open();
mandText=”test”;
mandType=CommandType.StoredProcedure;
cmdSelect.Connection=conn;
startRowIndex=Convert.ToInt32(startRowIndex/pageSize)+1;
if(String.IsNullOrEmpty(sortExpression))
sortExpression=”ProfileId”;
cmdSelect.Parameters.AddWithValue(”@CurrentPage”,startRowIndex);
cmdSelect.Parameters.Add With Value(”@Page Size”,page Size);
cmdSelect.Parameters.Add With Value(”@Sort Expression”,sortExpression);
SqlDataAdapter dataAdapter=new SqlDataAdapter();
dataAdapter.SelectCommand=cmdSelect;
dataAdapter.Fill(profileDataTable);
…
在页面login-on.aspx的Grid View控件中设置好数据源后,即可实现高效的分页显示。
四、结束语
本文介绍了一种高效的利用Grid View控件实现大量数据分页的方法。主要是通过编写一个存储过程,实现每页需要显示多少数据,就从数据库中取出多少条数据的方式,避免了原来将数据一次性取出,当数据量特别大时,系统运行效率极低的弊端。
参考文献:
[1]Daniel Cazzulin.C# Web应用程序入门经典[M].北京:清华大学出版社,2003
[2]邵良杉,刘好增3.5(C#)实践教程[M].北京:清华大学出版社,2009
[3]李丹.SQL Server2005数据库管理与开发实用教程[M].北京:机械工业出版社,2010
[4]