您的位置:首页 > 编程语言 > ASP

初学--ASP.NET分页控件

2008-07-10 10:38 337 查看
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data;

using System.Data.SqlClient;

namespace MyComplexControls

存储过程

create PROC proc_Navigation

@tableName varchar(100), --要分页显示的表名

@PageCurrent int=1, --要显示的页码

@PageSize int=10, --每页的大小(记录数)

@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段

@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序

@Where nvarchar(1000)='', --查询条件

@PageCount int output

as

SET XACT_ABORT ON -- 打开 try功能

BEGIN TRY --开启事务

begin tran

declare @keyName varchar(200)

declare @name varchar(200)

set @keyName=''

declare mycursor cursor

for

select column_name from information_schema.key_column_usage

where table_name = @tableName and constraint_name like 'PK_%'

open mycursor

fetch mycursor into @name

while @@fetch_status<>-1

if @@fetch_status <>-2

begin

set @keyName = @keyName + @name + ','

fetch mycursor into @name

end

close mycursor

deallocate mycursor

set @keyName = subString(@keyName,1,len(@keyName)-1)

declare

@FieldShow1 varchar(1000)

if len(@FieldShow)=0

begin

set @FieldShow1 = ' * ' --输入的要显示的字段为空字符串时,设置为*

end

else

begin

set @FieldShow1 = @FieldShow --将要显示的字段名赋值给变量@FieldShow1

end

declare

@FieldOrder1 varchar(100)

if len(@FieldOrder) = 0

begin

set @FieldOrder1 = ''

end

else

begin

set @FieldOrder1 = ' order by '+@FieldOrder

end

declare

@where1 varchar(1000)

if len(@Where) = 0

begin

set @where1 = ''

end

else

begin

set @where1 = ' where '+@Where

end

declare

@startnumber int, --开始行数

@endnumber int, --结束行数

@sql varchar(5000) --分页SQL语句

set @startnumber = (@PageCurrent-1)*@PageSize --根据每行页数和页数设置开始行数

set @endnumber = @PageCurrent*@PageSize --根据每行页数和页数设置结束行数 --主键名

set @sql =

'select * from (select row_number() over(order by '+

@keyName+') row_num,'+

@FieldShow1+' from '+

@tableName+

@where1 +')tablename where row_num > '+

convert(varchar(5),@startnumber)+' and row_num <= '+

convert(varchar(5),@endnumber)+

@FieldOrder1 --设置分页SQL语句

print @sql

exec (@sql)

IF @PageCount IS NULL

BEGIN

DECLARE @text nvarchar(4000)

SET @text=N'SELECT @PageCount=COUNT(*) '

+N' FROM '+@tableName

+N' '+@where1

EXEC sp_executesql @text,N'@PageCount int OUTPUT',@PageCount OUTPUT

SET @PageCount=(@PageCount+@PageSize-1)/@PageSize

END

commit tran --提交事务

print 'commited'

END TRY

BEGIN CATCH

rollback --事务回滚

print 'rolled back'

END CATCH

go

declare @a int

exec proc_Navigation 'aa',1,8,'','','',@a output

print @a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: