关于数据库分页总结
1.中小型数据库可使用数据库分页
Grid1.RecordCount = GetTotalCount();
table = GetPagedDataTable(Grid1.PageIndex, Grid1.PageSize);
(1)指定数据的总数
Grid1.RecordCount = GetTotalCount();
private int GetTotalCount()
{
return DataSourceUtil.GetDataTable2().Rows.Count;
}
(2)获取分页数据
//参数 第N页,每页总数
private DataTable GetPagedDataTable(int pageIndex, int pageSize)
{
DataTable source = DataSourceUtil.GetDataTable2();
DataTable paged = source.Clone();
int rowbegin = pageIndex * pageSize;
int rowend = (pageIndex + 1) * pageSize;
if (rowend > source.Rows.Count)
{
rowend = source.Rows.Count;
}
for (int i = rowbegin; i < rowend; i++)
{
paged.ImportRow(source.Rows[i]);
}
return paged;
}
2.大型数据表的分页(因1会读取表内所有的记录,故用SQL语句改进)
思路:
(1)子查询获取第N-1页的数据
(2)外查询使用NOT IN 从子查询中获取数据
SELECT TOP PAGESIZE NEWSTITLE FORM NEWSINFO WHERE NEWSID NOT IN
(SELECT TOP (PAGE-1) * PAGESIZE NEWSID FROM NEWSINFO order by NEWSID DESC)
order by NEWSID DESC
3.对于2的再次改进
SELECT TOP PAGESIZE NEWSTITLE FORM NEWSINFO WHERE NEWSID <
(SELECT MIN(NEWSID) FROM
(SELECT TOP (PAGE-1) * PAGESIZE NEWSID FROM NEWSINFO order by NEWSID DESC)
AS TB)
order by NEWSID DESC
4.存储过程
待完结…………