2023年6月21日发(作者:)

查询分页技术:实现Web数据分页浏览通过查询分页技术可将其按照⼀定规则分成多页进⾏显⽰,每页显⽰⼀定数⽬记录。应⽤数据记录分页技术,可以提⾼数据的查询性能及页⾯的显⽰速度,减轻数据库服务器的负担。AD:利⽤开发Web数据库的查询功能模块时,为了减少⽹络流量,提⾼页⾯的访问速度,⼀般不会将所有的查询结果完全在⼀页中显⽰出来,⽽是将其按照⼀定规则分成多页进⾏显⽰,每页显⽰⼀定数⽬记录。应⽤数据记录分页技术,可以提⾼数据的查询性能及页⾯的显⽰速度,减轻数据库服务器的负担。1 查询分页技术概述对Web数据库查询结果进⾏分页显⽰主要有两种实现⽅式,分别是浏览器端分页和服务器端分页。浏览器端分页是先将数据库中所有满⾜查询条件的记录⼀次性保存下来,然后通过设置每页要显⽰的记录数,再确定要显⽰记录的起点和终点来实现分页显⽰。服务器端分页是根据⽤户的请求,每次分别从满⾜查询条件的记录中将规定数⽬的记录数作读取并显⽰出来。为此,我们采⽤服务器端分页的⽅式。在浏览器端进⾏分页时,为了减少⽹络的流量,我们采⽤SQL Server的存储过程进⾏分页。2 主要技术类在Web应⽤系统中,使⽤将系统前端的Web浏览器和后台的数据库之间联系起来。是.NET Framework提供的⼀系列类,提供了对关系数据、XML和应⽤程序数据的访问。3 查询分页技术的实现 在此,我们使⽤ent(包含访问SQL Server数据库的类)对MS SQL Server2000进⾏操作,使⽤中的C#语⾔进⾏描述。以笔者开发的“在线考试系统”中的“查看学⽣留⾔信息模块”为例来说明该项技术的开发过程。3.1连接数据库要访问数据,必须⾸先连接数据库,在此我们利⽤nection类来连接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类位于ent空间中,表⽰要对SQL Server数据库执⾏的⼀个Transact-SQL语句或存储过程。本例中⽤到的属性和⽅法如下:CommandText获取或设置要对数据源执⾏的 Transact-SQL 语句或存储过程。CommandType获取或设置⼀个值,该值指⽰如何解释 CommandText 属性。Connection获取或设置 SqlCommand 的此实例使⽤的 SqlConnection。Parameters获取 SqlParameterCollection。ExecuteReader将 CommandText 发送到 Connection 并⽣成⼀个 SqlDataReader。SqlParameter类位于ent空间中,表⽰ 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. (); //打开数据库连接

10.

11. tion = SCN;

12.

13. dText = "pagecut"; //执⾏存储过程

14.

15. dType = Procedure;

16.

17. SqlParameter[] pares ={ new SqlParameter("@PageSize",),

18.

19. new SqlParameter("@PageIndex",)};

20.

21. pares[0].Value = PageSize;

22.

23. pares[1].Value = PageIndex;

24.

25. (); //清空参数

26.

27. foreach (SqlParameter parameter in pares)

28.

29. {

30.

31. (parameter);

32.

33. }

34.

35. SDR = eReader(); //执⾏存储过程

36.

37. urce = SDR;  //定义GridView的数据源

38.

39. nd(); // GridView数据源绑定

40.

41. (); //关闭连接

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. ();

12.

13. dText = "select count(*) from tdbLevMess ";

14.

15. tion = SCN;

16.

17. int ReCount = 32(eScalar().ToString());//数据集记录总数

18.

19. ();

20.

21. ("PageSize", 20); //为共享变量每页记录数PageSize赋值

22.

23. PageSize = 16(Session["PageSize"]);//每页记录数为20

24.

25. PageCount=ReCount % PageSize == 0? ReCount / PageSize: ReCount / PageSize + 1;//计算页⾯的总页数

26.

27. ("PageCount", PageCount); //为共享变量总页数PageCount赋值

28.

29. PageIndex = 1;

30.

31. ("PageIndex", PageIndex); //为共享变量总页数PageIndex赋值

32.

33. GridView_Init (PageSize, PageIndex); //调⽤过程为GridView填充数据

34.

35. d = false, d = false;

36.

37. d = true,d = true;

38.

39. = "第"+ng() + "页/共" + ng() + "页";

40.

41. }

42. 43. }

44.

45. protected void LinkButton2_Click(object sender, EventArgs e)

46.

47. {//上⼀页按钮

48.

49. int PageIndex = 16( Session["PageIndex"] )- 1;

50.

51. int PageCount = 16( Session["PageCount"]);

52.

53. ("PageIndex", PageIndex);

54.

55. int PageSize = 16(Session["PageSize"]);

56.

57. if (PageIndex < = 1)

58.

59. {

60.

61. d = false;

62.

63. d = false;

64.

65. }

66.

67. d = true;

68.

69. d = true;

70.

71. GridView_Init(PageSize, PageIndex);

72.

73. = "第" + ng() + "页/共" + ng() + "页";

74.

75. }

我们只给出了LinkButton2的代码(实现向上翻页),其它超级链接代码跟此相类似。4 结束语查询分页技术是Web应⽤系统开发中经常遇到的重要⼯作,选择⼀种⾼效的查询分页技术,不仅能⼤⼤提⾼响应速度,⽽且能提⾼整个系统性能,节约服务器宝贵资源。

2023年6月21日发(作者:)

查询分页技术:实现Web数据分页浏览通过查询分页技术可将其按照⼀定规则分成多页进⾏显⽰,每页显⽰⼀定数⽬记录。应⽤数据记录分页技术,可以提⾼数据的查询性能及页⾯的显⽰速度,减轻数据库服务器的负担。AD:利⽤开发Web数据库的查询功能模块时,为了减少⽹络流量,提⾼页⾯的访问速度,⼀般不会将所有的查询结果完全在⼀页中显⽰出来,⽽是将其按照⼀定规则分成多页进⾏显⽰,每页显⽰⼀定数⽬记录。应⽤数据记录分页技术,可以提⾼数据的查询性能及页⾯的显⽰速度,减轻数据库服务器的负担。1 查询分页技术概述对Web数据库查询结果进⾏分页显⽰主要有两种实现⽅式,分别是浏览器端分页和服务器端分页。浏览器端分页是先将数据库中所有满⾜查询条件的记录⼀次性保存下来,然后通过设置每页要显⽰的记录数,再确定要显⽰记录的起点和终点来实现分页显⽰。服务器端分页是根据⽤户的请求,每次分别从满⾜查询条件的记录中将规定数⽬的记录数作读取并显⽰出来。为此,我们采⽤服务器端分页的⽅式。在浏览器端进⾏分页时,为了减少⽹络的流量,我们采⽤SQL Server的存储过程进⾏分页。2 主要技术类在Web应⽤系统中,使⽤将系统前端的Web浏览器和后台的数据库之间联系起来。是.NET Framework提供的⼀系列类,提供了对关系数据、XML和应⽤程序数据的访问。3 查询分页技术的实现 在此,我们使⽤ent(包含访问SQL Server数据库的类)对MS SQL Server2000进⾏操作,使⽤中的C#语⾔进⾏描述。以笔者开发的“在线考试系统”中的“查看学⽣留⾔信息模块”为例来说明该项技术的开发过程。3.1连接数据库要访问数据,必须⾸先连接数据库,在此我们利⽤nection类来连接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类位于ent空间中,表⽰要对SQL Server数据库执⾏的⼀个Transact-SQL语句或存储过程。本例中⽤到的属性和⽅法如下:CommandText获取或设置要对数据源执⾏的 Transact-SQL 语句或存储过程。CommandType获取或设置⼀个值,该值指⽰如何解释 CommandText 属性。Connection获取或设置 SqlCommand 的此实例使⽤的 SqlConnection。Parameters获取 SqlParameterCollection。ExecuteReader将 CommandText 发送到 Connection 并⽣成⼀个 SqlDataReader。SqlParameter类位于ent空间中,表⽰ 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. (); //打开数据库连接

10.

11. tion = SCN;

12.

13. dText = "pagecut"; //执⾏存储过程

14.

15. dType = Procedure;

16.

17. SqlParameter[] pares ={ new SqlParameter("@PageSize",),

18.

19. new SqlParameter("@PageIndex",)};

20.

21. pares[0].Value = PageSize;

22.

23. pares[1].Value = PageIndex;

24.

25. (); //清空参数

26.

27. foreach (SqlParameter parameter in pares)

28.

29. {

30.

31. (parameter);

32.

33. }

34.

35. SDR = eReader(); //执⾏存储过程

36.

37. urce = SDR;  //定义GridView的数据源

38.

39. nd(); // GridView数据源绑定

40.

41. (); //关闭连接

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. ();

12.

13. dText = "select count(*) from tdbLevMess ";

14.

15. tion = SCN;

16.

17. int ReCount = 32(eScalar().ToString());//数据集记录总数

18.

19. ();

20.

21. ("PageSize", 20); //为共享变量每页记录数PageSize赋值

22.

23. PageSize = 16(Session["PageSize"]);//每页记录数为20

24.

25. PageCount=ReCount % PageSize == 0? ReCount / PageSize: ReCount / PageSize + 1;//计算页⾯的总页数

26.

27. ("PageCount", PageCount); //为共享变量总页数PageCount赋值

28.

29. PageIndex = 1;

30.

31. ("PageIndex", PageIndex); //为共享变量总页数PageIndex赋值

32.

33. GridView_Init (PageSize, PageIndex); //调⽤过程为GridView填充数据

34.

35. d = false, d = false;

36.

37. d = true,d = true;

38.

39. = "第"+ng() + "页/共" + ng() + "页";

40.

41. }

42. 43. }

44.

45. protected void LinkButton2_Click(object sender, EventArgs e)

46.

47. {//上⼀页按钮

48.

49. int PageIndex = 16( Session["PageIndex"] )- 1;

50.

51. int PageCount = 16( Session["PageCount"]);

52.

53. ("PageIndex", PageIndex);

54.

55. int PageSize = 16(Session["PageSize"]);

56.

57. if (PageIndex < = 1)

58.

59. {

60.

61. d = false;

62.

63. d = false;

64.

65. }

66.

67. d = true;

68.

69. d = true;

70.

71. GridView_Init(PageSize, PageIndex);

72.

73. = "第" + ng() + "页/共" + ng() + "页";

74.

75. }

我们只给出了LinkButton2的代码(实现向上翻页),其它超级链接代码跟此相类似。4 结束语查询分页技术是Web应⽤系统开发中经常遇到的重要⼯作,选择⼀种⾼效的查询分页技术,不仅能⼤⼤提⾼响应速度,⽽且能提⾼整个系统性能,节约服务器宝贵资源。