aspnetpager用法

本文介绍了一种使用存储过程实现的SQL分页技术,包括在SQL Server 2000和2005中创建存储过程的方法,以及如何通过ADO.NET进行数据绑定。

 

        //存储过程的分页
        
//Repeater1.DataSource = panasia.DAL.SqlHelper.ExecuteReader(CommandType.StoredProcedure, "aspnetpager",
        
//new SqlParameter("@kindid", kindid),
        
//new SqlParameter("@pagesize", AspNetPager1.PageSize),
        
//new SqlParameter("@pageindex", AspNetPager1.CurrentPageIndex));

        
string sql = "select * from news where kind_id=" + kindid.ToString() + " order by psn desc,ptime desc,id desc";
        DataTable dt 
= n.pager(AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, sql);
        System.Data.DataView dv 
= new System.Data.DataView(dt);
        Repeater1.DataSource 
= dv;
        Repeater1.DataBind();

        
/// <summary>
        
/// 用于分页
        
/// </summary>
        
/// <param name="startindex">开始记录数</param> 
        
/// <param name="pagesize">每页条数</param> 
        
/// <param name="sql">sql</param> 
        
/// <returns>返回数据表</returns>

        public DataTable pager(int pageindex, int pagesize, string sql)
        
{
            DataTable dt 
= new DataTable();
            SqlConnection Conn 
= new SqlConnection(SqlHelper.ConnectionString);
            Conn.Open();
            
try
            
{
                SqlDataAdapter adapter 
= new SqlDataAdapter(sql, Conn);
                DataSet ds 
= new DataSet();
                
int startindex = (pageindex - 1* pagesize;
                adapter.Fill( ds, startindex, pagesize, 
"a");
                dt
=ds.Tables["a"];
            }

            
finally
            
{
                
if (Conn != null && Conn.State == ConnectionState.Open)
                    Conn.Close();
            }

            
return dt;
        }

 

sql2000下

CREATE procedure aspnetpager 
(
@kindid nvarchar(255),
@pagesize int,
@pageindex int)
as
set nocount on
begin
declare @indextable table(id int identity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
insert into @indextable(nid) select id from news where kind_id=@kindid order by psn desc,ptime desc,id desc
select * from news O,@indextable t where O.id=t.nid
and t.id between @PageLowerBound+1 and @PageUpperBound order by t.id
end
set nocount off
GO

 sql2005

 

create procedure aspnetpager 
(
@pagesize int,
@pageindex int)
as

begin
 
with temptbl as (
SELECT ROW_NUMBER() OVER (ORDER BY psn desc,ptime desc,id desc)AS Row, * from news O  where kind_id=1)
 
SELECT * FROM temptbl where Row between (@pageindex-1)*@pagesize+1 and (@pageindex-1)*@pagesize+@pagesize
end

 

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值