根据当前页号(pageIndex)和页⼤⼩(pageSize)获取分页数
⼀、⽤存储过程
IF EXISTS(SELECT * FROM sys.objects WHERE NAME='pro_paging')
DROP PROC pro_paging
go
CREATE PROC pro_paging
(
@orderColumn varchar(20),
@tableName VARCHAR(20),
@pageSize INT,
@pageNo INT,
@strWhere varchar(20)
param name)
AS
DECLARE @sqlString nvarchar(500)
SET @sqlString=
'WITH newClientInfo AS
(
SELECT row_number() OVER (ORDER BY '+@orderColumn+') AS newIndex,* FROM '+@tableName +' where '+ @strWhere+'
)
SELECT * FROM newClientInfo WHERE newIndex between '+str((@pageNo-1)*@pageSize+1)+' and '+str(@pageSize*@pageNo) EXEC sp_executesql @sqlString
EXEC pro_paging 'employID','employInfo',5,2,'sex=''男'''
select * from employInfo where sex='男'
核⼼:主要是为表增加⼀列row_number并且给该新列取⼀个名字newIndex,然后⽤WHERE newIndex between  (@pageNo-
1)*@pageSize+1 and @pageSize*@pageNo 。
⼆、主要是在SQLHelp类中获取分⾯数据集,填充数据集⽤的如下的⽅法:
/// <summary>
/// 获得分页的数据
/// </summary>
/// <param name="strSql">查询语句</param>
/// <param name="dataNo">刚开始的数据号</param>
/// <param name="pageSize">数据条数</param>
/// <param name="tabelName">表名</param>
/// <returns></returns>
public static DataSet GetDataSet(string strSql,int dataNo,int pageSize,string tabelName)
{
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = strSql;
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, dataNo, pageSize, tabelName);  //主要Fill⽅法的重载
return ds;
}
}
}
dataNo:为每页数据的开始数据号,可以通过转换:pageIndex(页号)*pageSize(页⼤⼩)=dataNo
三、在LINQ中
⽐如上下⽂中有HRManageDataContext contex;
获取所有的数据:List<HRFileManage> list=from v in contex.HRFileManage
select v;
获取当前页的数据为:
List<HRFileManage> pageList =list.Skip(pageIndex*pageSize).Take(pageSize);
核⼼:主要是⽤Skip(int num)⽅法(该⽅法的⽤法:调过指定条数num的数据),Take(int num)(获取指定条数num的数据).