您当前位置:设计在线网 >> Sql Server >> 浏览文章

如何使用存储过程进行分页

分享到:
本文章讲述了如何使用存储过程进行分页.

-- 获

取指定页的数据

Create PROCEDURE page

@tblNamevarchar(255),-- 表名

@strGetFields varchar(1000) = '*',-- 需要返回的列

@fldName varchar(255)='',-- 排序的字段名

@PageSizeint = 10,-- 页尺寸

@PageIndexint = 1,-- 页码

@doCountbit = 0,-- 返回记录总数,非 0 值则返回

@OrderType bit = 0,-- 设置排序类型,非 0 值则降序

@strWherevarchar(1500) = ''-- 查询条件 (注意: 不要加 where)

AS

declare @strSQLvarchar(5000)-- 主语句

declare @strTmpvarchar(110)-- 临时变量

declare @strOrder varchar(400)-- 排序类型

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '[email protected]

else

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin

if @OrderType != 0

begin

set @strTmp = '(select max'

set @strOrder = ' order by [' + @fldName +'] asc'

end

if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '[email protected]+ 'from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder

else

set @strSQL = 'select top ' + str(@PageSize) +' '[email protected]+ 'from ['+ @tblName + '] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '[email protected]+ 'from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '[email protected]+ 'from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end

exec (@strSQL)

GO

private string strConn = ConfigurationSettings.AppSettings["db_11"];

public int recordNum; // 记录数

public int pageIndex; // 目前所在页

public int pageNum; // 总页数

public int pageEach = 8; // 每页记录数

private void Page_Load(object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

pageIndex = Convert.ToInt32(Request.QueryString["pageIndex"]);

// 绑定

DataSet ds = new DataSet();

string strSQL = "exec GetData '表','字段','条件','排序字段','升序/降序','" + pageEach + "','" + pageIndex + "','0'";

SqlDataAdapter cmd = new SqlDataAdapter(strSQL,strConn);

cmd.Fill(ds);

parent.DataSource = ds.Tables[0].DefaultView;

Page.DataBind();

// 总页码

strSQL = "exec GetData '表','','条件','','','','','1'";

BaBaoDB db = new BaBaoDB();

SqlDataReader reader = db.SelectReader(strSQL);

if(reader.Read())

{

recordNum = Convert.ToInt32(reader[0]);

if(recordNum == 0)

{

// 无记录的情况

pageNum = pageIndex;

}

else

{

if(recordNum % pageEach == 0)

{

pageNum = recordNum / pageEach;

}

else

{

pageNum = recordNum / pageEach + 1;

}

}

}

else

{

pageNum = pageIndex;

}

reader.Close();

}

推荐阅读:
mysql命令行命令和SQL语句
mysql如何做增量备份
基于mysql字符集设定规则总结
推荐文章  
赞助商链接  
热门排行  
主题推广  
中国设计在线网 All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号:湘ICP备09001063号