初学--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
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
相关文章推荐
- asp.net分页控件
- 打造通用ASP.NET数据分页控件
- 创建用于 ASP.NET 的分页程序控件
- ASP.NET初学笔记:Calendar控件
- Asp.Net 可定制分页用户控件
- asp.net自定义分页控件示例
- 打造通用ASP.NET数据分页控件
- 【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。
- 解析asp.net的分页控件
- 在asp.net mvc中创建使用Linq to sql的分页控件
- 使用 ASP.NET Atlas PageNavigator控件实现客户端分页导航
- asp.net 自定义分页控件
- ASP.NET MVC URL分页控件
- asp.net分页控件AspNetPager的使用,使用传统分页和存储过程分页
- ASP.NET Repeater控件实现简单分页
- QuickPager asp.net 分页控件、表单控件等自定义控件下载 和介绍 【2009.05.15更新】
- C# ASP.NET AspNetPager对DataList控件分页
- Studio for ASP.NET Wijmo:使用 C1Pager 对 DataList 控件分页
- WebPager For ASP.NET (基于ASP.NET的数据分页控件)
- Asp.Net Web控件 (四)(可分页的Repeater)