在当前信息社会,信息就是整个生命线,而大量的信息被存储在数据库里。
DataSet虽说为数据访问提供了很好的数据方法,不过由于其是内存中的数据集,如果数据表的数据比较大,比如说又几十万条,其占用的空间就有十几个GB,这样服务器的内存将远远不能满足需要,如果再有几千人同时访问,可想而知服务器的压力又多大,甚至就会崩溃。为了减轻服务器的压力,我们只能控制其每次需要的数据调出来,只显示一小部分数据,所以呢,分页显示并且在底层数据调用来决定分页,显得很重要。这也是本文的目的所在,希望能给大家带来帮助。
而嵌套查询的目的,就是保证每次取出的数据的唯一性,防止在相同的查询条件下查出多余所需数目的数据,而且还可以防止两页中出现重复的数据。这些问题我在实际的应用中就遇到了,而且还浪费了几个小时的时间去摸索,希望大家引以为鉴。
MySql中的语句:

Code
1
string 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
1
1 string strSql= "select
2
2
3
3F_ID,F_Name,F_Address,F_Directory,F_Guid,F_CommentDirectory,F_EditTime,F_PhotographyTime,F_UploadTime,F_Photo,F_Author,F_Kind,F
4
4
5
5_Size,F_UploadTime,F_Viewer,F_Commentary,F_Grades from (select Top " + End.ToString() + " * from (select Top " +
6
6
7
7Start.ToString() + " * from T_Vidio " + " where F_Status=" + Status.ToString() +" order by F_EditTime desc)DERIVETBL order by
8
8
9
9F_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
}
得到的简单界面如图: