DataSet虽说为数据访问提供了很好的数据方法,不过由于其是内存中的数据集,如果数据表的数据比较大,比如说又几十万条,其占用的空间就有十几个GB,这样服务器的内存将远远不能满足需要,如果再有几千人同时访问,可想而知服务器的压力又多大,甚至就会崩溃。为了减轻服务器的压力,我们只能控制其每次需要的数据调出来,只显示一小部分数据,所以呢,分页显示并且在底层数据调用来决定分页,显得很重要。这也是本文的目的所在。
在当前信息社会,信息就是整个生命线,而大量的信息被存储在数据库里。
DataSet虽说为数据访问提供了很好的数据方法,不过由于其是内存中的数据集,如果数据表的数据比较大,比如说又几十万条,其占用的空间就有十几个GB,这样服务器的内存将远远不能满足需要,如果再有几千人同时访问,可想而知服务器的压力又多大,甚至就会崩溃。为了减轻服务器的压力,我们只能控制其每次需要的数据调出来,只显示一小部分数据,所以呢,分页显示并且在底层数据调用来决定分页,显得很重要。这也是本文的目的所在,希望能给大家带来帮助。
而嵌套查询的目的,就是保证每次取出的数据的唯一性,防止在相同的查询条件下查出多余所需数目的数据,而且还可以防止两页中出现重复的数据。这些问题我在实际的应用中就遇到了,而且还浪费了几个小时的时间去摸索,希望大家引以为鉴。
MySql中的语句:
Code
1string strSql= "select F_ID,F_Name,F_Address,F_Directory,F_Guid,F_CommentDirectory,F_EditTime,F_PhotographyTime,F_UploadTime,F_Photo,F_Author,F_Kind,F_Size,F_UploadTime,F_Viewer,F_Commentary,F_Grades from (select * from (select * from T_Vidio order by F_EditTime desc limit 0," + StartCount + ")DERIVETBL order by F_EditTime limit 0,"+EndCount+")A order by F_EditTime desc";
而在SQL Server中则用Top代替了limit,例如:
Sql Code
11 string strSql= "select
22
33F_ID,F_Name,F_Address,F_Directory,F_Guid,F_CommentDirectory,F_EditTime,F_PhotographyTime,F_UploadTime,F_Photo,F_Author,F_Kind,F
44
55_Size,F_UploadTime,F_Viewer,F_Commentary,F_Grades from (select Top " + End.ToString() + " * from (select Top " +
66
77Start.ToString() + " * from T_Vidio " + " where F_Status=" + Status.ToString() +" order by F_EditTime desc)DERIVETBL order by
88
99F_EditTime) A order by F_EditTime desc";
数据绑定:
C# Main Code
1 public void BindData(int PageNum)
2 {
3 int start, end;
4 /**//**/
5 /**////pageNum从0开始取,pagesize为每页显示的数据行
6 start = (PageNum + 1) * pageSize;
7 /**//**/
8 /**////获取总页码
9 int TotalPage = CLUtility.getConvertIntValue(Session["TotalPage"]);
10 int rowCount = CLUtility.getConvertIntValue(Session["rowCount"]);
11 if (PageNum + 1 < TotalPage)
12 {
13 end = pageSize;
14 }
15 else
16 {
17 //得到绝对值
18 end = Math.Abs(rowCount - PageNum * pageSize);
19 }
20
21 if (end == 0)
22 {
23 end = 1;
24 }
25 DataTable dTable = VidioManager.getVidios(Vidio.StatusNormal, start, end);
26 if (dTable == null)
27 {
28 return;
29 }
30 ButtonAbleToUse(PageNum);
31 vidioGridView.DataSource = dTable.DefaultView;
32 vidioGridView.DataBind();
33 }
得到的简单界面如图: