對於數據庫的分頁,目前比較傳統的方法是采用分頁存儲過程,其實用 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 將當前記錄移動到起始頁對應的那條紀錄,然後再開始讀數據。由於之前只是移動記錄指針,並不讀取數據,所以效率很高。