利用网上的一个存储过程(该存储过程需要用到有唯一的整型主键的表,然后按该主键进行排序,这是一个不足):
 1利用存储过程的分页ALTER PROCEDURE pagination 
 2利用存储过程的分页@tblName varchar(255), -- 表名 
 3利用存储过程的分页@strGetFields varchar(1000= '*'-- 需要返回的列 
 4利用存储过程的分页@fldName varchar(255)=''-- 排序的字段名 
 5利用存储过程的分页@PageSize int , -- 页尺寸 
 6利用存储过程的分页@PageIndex int-- 页码 
 7利用存储过程的分页@doCount bit , -- 返回记录总数, 非 0 值则返回 
 8利用存储过程的分页@OrderType bit , -- 设置排序类型, 非 0 值则降序 
 9利用存储过程的分页@strWhere varchar(1500= '' -- 查询条件 (注意: 不要加 where) 
10利用存储过程的分页AS 
11利用存储过程的分页declare @strSQL varchar(5000-- 主语句 
12利用存储过程的分页declare @strTmp varchar(110-- 临时变量 
13利用存储过程的分页declare @strOrder varchar(400-- 排序类型 
14利用存储过程的分页
15利用存储过程的分页if @doCount != 0 
16利用存储过程的分页    begin 
17利用存储过程的分页        if @strWhere !='' 
18利用存储过程的分页            set @strSQL = "select count(*as Total from [" + @tblName + "] where "+@strWhere 
19利用存储过程的分页        else 
20利用存储过程的分页            set @strSQL = "select count(*as Total from [" + @tblName + "]
21利用存储过程的分页    end 
22利用存储过程的分页    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 
23利用存储过程的分页else 
24利用存储过程的分页    begin 
25利用存储过程的分页
26利用存储过程的分页        if @OrderType != 0 
27利用存储过程的分页            begin 
28利用存储过程的分页                set @strTmp = "<(select min
29利用存储过程的分页                set @strOrder = " order by [" + @fldName +"] desc
30利用存储过程的分页                --如果@OrderType不是0,就执行降序,这句很重要! 
31利用存储过程的分页            end 
32利用存储过程的分页        else 
33利用存储过程的分页            begin 
34利用存储过程的分页                set @strTmp = ">(select max
35利用存储过程的分页                set @strOrder = " order by [" + @fldName +"] asc
36利用存储过程的分页            end 
37利用存储过程的分页
38利用存储过程的分页        if @PageIndex = 1 
39利用存储过程的分页            begin 
40利用存储过程的分页                if @strWhere != '' 
41利用存储过程的分页                    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder 
42利用存储过程的分页                else 
43利用存储过程的分页                    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder 
44利用存储过程的分页                --如果是第一页就执行以上代码,这样会加快执行速度 
45利用存储过程的分页            end 
46利用存储过程的分页        else 
47利用存储过程的分页            begin 
48利用存储过程的分页                --以下代码赋予了@strSQL以真正执行的SQL代码 
49利用存储过程的分页                set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
50利用存储过程的分页                + @tblName + "] where [" + @fldName + "]+ @strTmp + "(["+ @fldName + "]from (select top " + str((@PageIndex-1)*@PageSize+ " ["+ @fldName + "] from [" + @tblName + "]+ @strOrder + ") as tblTmp)"+ @strOrder 
51利用存储过程的分页
52利用存储过程的分页                if @strWhere != '' 
53利用存储过程的分页                    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
54利用存储过程的分页                    + @tblName + "] where [" + @fldName + "]+ @strTmp + "([
55利用存储过程的分页                    + @fldName + "]from (select top " + str((@PageIndex-1)*@PageSize+ " [
56利用存储过程的分页                    + @fldName + "] from [" + @tblName + "] where " + @strWhere + " " 
57利用存储过程的分页                    + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder 
58利用存储过程的分页            end 
59利用存储过程的分页    end 
60利用存储过程的分页exec (@strSQL)

网页调用:
 1利用存储过程的分页    private static DataSet GetCustomersData(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, int doCount, int OrderType, string strWhere)
 2    }
具体调用:
1、返回记录数
利用存储过程的分页int pageSize=10;
利用存储过程的分页
int pageIndex=1;
利用存储过程的分页
int recordCount = Convert.ToInt32(GetCustomersData("Categories""*""CategoryID", pageSize, pageIndex, 10"").Tables[0].Rows[0][0].ToString());

2、返回记录集
利用存储过程的分页int pageSize=10;
利用存储过程的分页
int pageIndex=1;
利用存储过程的分页DataSet ds 
= GetCustomersData("Categories""*""CategoryID", pageSize, pageIndex, 10"");

相关文章: