对于数据库的分页,目前比较传统的方法是采用分页存储过程,其实用 DataReader 也可以实现分页 ,不需要写存储过程,实现效率上也比几种比较流行的分页方法要略快。
在开始这个方法之前,让我们先创建一个简单的测试环境:
use Test
GO
if exists (select * from sysobjects where id = object_id('R_Student') and type = 'u')
drop table R_Student
GO
create table R_Student
(
Id nvarchar(64) Primary Key,
Class nvarchar(64) NOT NULL,
Age tinyint NOT NULL,
Sex tinyint NOT NULL
)
GO
Declare
@i int
set @i = 0;
while (@i < 1000000)
begin
insert R_Student values('Name' + Str(@i),'Class' + Str(@i), @i % 100, @i % 2)
set @i = @i + 1
end
通过上述语句创建一个简单的数据表,并插入100万条记录
DataReader 分页的方法:
说出来很简单,见下面程序
public DataSet RangeQuery(string queryString, long first, long last)
{
try
{
OpenDataReader(queryString);
if (first < 0)
{
first = 0;
}
for (long i = 0; i < first; i++)
{
if (!_DataReader.Read())
{
return _SchemaDataSet;
}
}
if (last < 0)
{
last = 0x7FFFFFFFFFFFFFFF;
}
for (long i = first; i <= last; i++)
{
DataRow row = NextRow();
if (row != null)
{
_SchemaTable.Rows.Add(row);
}
else
{
return _SchemaDataSet;
}
}
return _SchemaDataSet;
}
finally
{
CloseDataReader();
}
}
其实就是通过DataReader 将当前记录移动到起始页对应的那条纪录,然后再开始读数据。由于之前只是移动记录指针,并不读取数据,所以效率很高。