在存储过程中实现分页
CREATE PROCEDURE dbo.CreateSimple
(
@PageIndex int,
@PageSize int
)
AS
BEGIN
--定义三个变量:
-- @PageLowerBound :所取出记录的下限.
-- @PageUpperBound: 所要取出记录的上限.
-- @TotalRecords: 返回记录总数,主要用于页面的计算.
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @TotalRecords int
--计算上下限的值.
SET @PageLowerBound=@PageIndex * @PageSize
SET @PageUpperBound=@PageLowerBound+@PageSize-1
--创建临时表:
--IndexId是标识,自动增长1;
--SimpleId由数据表[Simple]填充;
CREATE TABLE #PageIndexForSimple
(
IndexId int identity(0,1) NOT NULL,
SimpleId int
)
--填充临时表
INSERT INTO #PageIndexForSimple(SimpleId)
SELECT s.[SimpleId]
FROM [Simple] s
--这里可以加WHERE condition和ODER BY语句
--取得记录总数,其实影响行数就是记录总数
SELECT @TotalRecords=@@ROWCOUNT
--获取我们所要的记录.
SELECT s.*
FROM [Simple] s,#PageIndexForSimple p
WHERE s.[SimpleId]=p.[SimpleId]
AND p.[IndexId]>=@PageLowerBound
AND P.[IndexId]<=@PageUpperBound
ORDER BY s.[Simple]
--返回记录总数.
RETURE @TotalRecords
END 由上面的注释就能看懂了,呵呵,既然写到这里也把程序的代码写出来:
Public List<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
List<Simple> entity=new List<Simple>();
SqlParameter[]param=new SqlParameter[]{
new SqlParameter("@PageIndex",SqlDbType.Int),
new SqlParameter("@PageSize",SqlDbType.Int),
new SqlParameter("@ReturnValue",SqlDbType.Int),
};
param[0].Value=pageIndex;
param[1].Value=pageSize;
param[2].Direction = ParameterDirection.ReturnValue;
SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
While(reader.Read()){
entity.Add(GetSimpleEntity(reader))
}
reader.Close();
try{
totalRecords=(int)param[2].Value;
}catch{}
return entity;
} 上面的一些函数是自己写的:
SqlHelper类:简化数据库查询类.
GetSimpleEntity(SqlDataReader reader):由于经常在项目中会用到好基础实体类的获取,所以单独写一个私有函数,以便重用;
值得注意的是获取总的记录数时可能类型为DbNull而导致错误.
(
@PageIndex int,
@PageSize int
)
AS
BEGIN
--定义三个变量:
-- @PageLowerBound :所取出记录的下限.
-- @PageUpperBound: 所要取出记录的上限.
-- @TotalRecords: 返回记录总数,主要用于页面的计算.
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @TotalRecords int
--计算上下限的值.
SET @PageLowerBound=@PageIndex * @PageSize
SET @PageUpperBound=@PageLowerBound+@PageSize-1
--创建临时表:
--IndexId是标识,自动增长1;
--SimpleId由数据表[Simple]填充;
CREATE TABLE #PageIndexForSimple
(
IndexId int identity(0,1) NOT NULL,
SimpleId int
)
--填充临时表
INSERT INTO #PageIndexForSimple(SimpleId)
SELECT s.[SimpleId]
FROM [Simple] s
--这里可以加WHERE condition和ODER BY语句
--取得记录总数,其实影响行数就是记录总数
SELECT @TotalRecords=@@ROWCOUNT
--获取我们所要的记录.
SELECT s.*
FROM [Simple] s,#PageIndexForSimple p
WHERE s.[SimpleId]=p.[SimpleId]
AND p.[IndexId]>=@PageLowerBound
AND P.[IndexId]<=@PageUpperBound
ORDER BY s.[Simple]
--返回记录总数.
RETURE @TotalRecords
END 由上面的注释就能看懂了,呵呵,既然写到这里也把程序的代码写出来:
Public List<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
List<Simple> entity=new List<Simple>();
SqlParameter[]param=new SqlParameter[]{
new SqlParameter("@PageIndex",SqlDbType.Int),
new SqlParameter("@PageSize",SqlDbType.Int),
new SqlParameter("@ReturnValue",SqlDbType.Int),
};
param[0].Value=pageIndex;
param[1].Value=pageSize;
param[2].Direction = ParameterDirection.ReturnValue;
SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
While(reader.Read()){
entity.Add(GetSimpleEntity(reader))
}
reader.Close();
try{
totalRecords=(int)param[2].Value;
}catch{}
return entity;
} 上面的一些函数是自己写的:
SqlHelper类:简化数据库查询类.
GetSimpleEntity(SqlDataReader reader):由于经常在项目中会用到好基础实体类的获取,所以单独写一个私有函数,以便重用;
值得注意的是获取总的记录数时可能类型为DbNull而导致错误.


浙公网安备 33010602011771号