ASP.NET存储过程分页

存储过程:

create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int,--每页显示记录条数
@currentpage int,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
@rowcount int output,--总记录数,共有几条信息
@pagecount int output--总页数,共有多少页
AS
declare @countsql nvarchar(50)
declare @sql nvarchar(200)
declare @subsql nvarchar(100)--not in子sql语句
declare @tmpOrderid nvarchar(50)
--返回总记录数,并赋值给输出参数@rowcount
set @countsql='select @totalcount=count(*) from '+@tablename
exec sp_executesql @countsql,N'@totalcount int out',@rowcount output

 

--判断字段名是否为空
if @fieldname is null or @fieldname=''
set @fieldname=' * ' 

--判断是否排序及排序方式
if @orderid is null or @orderid=''
set @tmpOrderid=' '
else
begin
if @sort=0
set @tmpOrderid='order by '+@orderid+' desc'
else
set @tmpOrderid='order by '+@orderid+' asc'
end 

--计算页数
if @rowcount%@pagesize>0
set @pagecount =(@rowcount/@pagesize)+1;
else
set @pagecount=@rowcount/@pagesize;

--分页算法实现
set @subsql='select top'+str(@pagesize*(@currentpage-1))+' '+@orderid+' from '+@tablename+' '+@tmpOrderid
set @sql='select top'+str(@pagesize)+' '+@fieldname+' from '+@tablename+' where '+@orderid+' not in ('+@subsql+')'+@tmpOrderid
exec(@sql)


.CS文件:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
protected void Page_Load( object sender, EventArgs e)
{
  
int CurrentPage,RowCount,PageCount;
  
int PageSize = 2 ;
  
if (Request[ " CurrentPage " ] == null || Convert.ToInt32(Request[ " CurrentPage " ]) < 1 )
  {
    CurrentPage
= 1 ;
  }
  
else
  {
    CurrentPage
= Convert.ToInt32(Request[ " CurrentPage " ]);
  }
// 数据库操作
SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings[ " ConnStr " ].ToString());
SqlCommand cmd
= new SqlCommand( " pagelist " , sqlconn);
cmd.CommandType
= CommandType.StoredProcedure;
cmd.Connection
= sqlconn;
SqlParameter[] prams
= {
        
new SqlParameter( " @tablename " ,SqlDbType.NVarChar, 50 ),
        
new SqlParameter( " @fieldname " ,SqlDbType.NVarChar, 50 ),
        
new SqlParameter( " @pagesize " ,SqlDbType.Int),
        
new SqlParameter( " @currentpage " ,SqlDbType.Int),
        
new SqlParameter( " @orderid " ,SqlDbType.NVarChar, 50 ),
        
new SqlParameter( " @sort " ,SqlDbType.Int),
        
new SqlParameter( " @rowcount " ,SqlDbType.Int),
        
new SqlParameter( " @pagecount " ,SqlDbType.Int)};
prams[
0 ].Value = " news " ; // 表名
prams[ 1 ].Value = " * " ; // 字段名
prams[ 2 ].Value = PageSize; // 每页显示条数
prams[ 3 ].Value = CurrentPage; // 当前页数
prams[ 4 ].Value = " id " ; // 主键
prams[ 5 ].Value = 1 ; // 排序方式,0表示降序,1表示升序
prams[ 6 ].Direction = ParameterDirection.Output; // 总记录数
prams[ 7 ].Direction = ParameterDirection.Output; // 总页数
foreach (SqlParameter pram in prams)
{
  cmd.Parameters.Add(pram);
}
sqlconn.Open();
SqlDataAdapter sda
= new SqlDataAdapter();
DataSet ds
= new DataSet();
sda.SelectCommand
= cmd;
sqlconn.Close();
sda.Fill(ds);
// 数据库操作结束

RowCount
= ( int )cmd.Parameters[ " @rowcount " ].Value;
PageCount
= ( int )cmd.Parameters[ " @pagecount " ].Value;

if (CurrentPage > PageCount)
{
  Response.Redirect(
" CutPage.aspx?CurrentPage= " + Convert.ToString(PageCount));
  Response.End();
}
this .lblCurrent.Text = Convert.ToString(CurrentPage);
this .lblPageTotal.Text = Convert.ToString(PageCount);
this .lblRowsTotal.Text = Convert.ToString(RowCount);
this .lblPageSize.Text = Convert.ToString(PageSize);
  
this .hlFirst.NavigateUrl = " CutPage.aspx?CurrentPage=1 " ;
  
this .hlPrev.NavigateUrl = " CutPage.aspx?CurrentPage= " + Convert.ToString(CurrentPage - 1 );
  
this .hlNext.NavigateUrl = " CutPage.aspx?CurrentPage= " + Convert.ToString(CurrentPage + 1 );
  
this .hlLast.NavigateUrl = " CutPage.aspx?CurrentPage= " + Convert.ToString(PageCount);
  
if (Convert.ToInt32(CurrentPage) == 1 )
  {
    
this .hlPrev.Enabled = false ;
    
this .hlFirst.Enabled = false ;
  }
  
if (Convert.ToInt32(CurrentPage) == PageCount)
  {
    
this .hlNext.Enabled = false ;
    
this .hlLast.Enabled = false ;
  }
  GridView1.DataSource
= ds.Tables[ 0 ];
  GridView1.DataBind();
}

 


 

 

aspx文件:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
< asp:GridView ID ="GridView1" runat ="server" >
</ asp:GridView >
</ div >
< asp:Label ID ="lblCurrent" runat ="server" ></ asp:Label > 页 | 每页 < asp:Label ID ="lblPageSize"
runat
="server" ></ asp:Label > 条 | 共有 < asp:Label ID ="lblPageTotal" runat ="server" ></ asp:Label > 页 | 共有 < asp:Label ID ="lblRowsTotal"
runat
="server" ></ asp:Label > 条信息 |
< asp:HyperLink ID ="hlFirst" runat ="server" > 首页 </ asp:HyperLink >
|
< asp:HyperLink ID ="hlPrev" runat ="server" > 上一页 </ asp:HyperLink >
|
< asp:HyperLink ID ="hlNext" runat ="server" > 下一页 </ asp:HyperLink >
|
< asp:HyperLink ID ="hlLast" runat ="server" > 尾页 </ asp:HyperLink >< br />

 


 

转载于:https://www.cnblogs.com/sallen/archive/2010/05/26/1744222.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值