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
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyNavigation runat=server></{0}:MyNavigation>")]
public class MyNavigation : WebControl,INamingContainer
{
创建控件对象
自定义属性
定义方法
}
public enum ControlType
{
DataList,
GridView
}
public enum ButtonType
{
LinkButton,
ImageButton
}
}
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
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyNavigation runat=server></{0}:MyNavigation>")]
public class MyNavigation : WebControl,INamingContainer
{
创建控件对象
自定义属性
定义方法
}
public enum ControlType
{
DataList,
GridView
}
public enum ButtonType
{
LinkButton,
ImageButton
}
}
存储过程
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
/***设置where条件***/
declare
@where1 varchar(1000)
if len(@Where) = 0
begin
set @where1 = ''
end
else
begin
set @where1 = ' where '+@Where
end
/***写分页sql语句***/
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)
/***输出参数@PageCount***/
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
@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
/***设置where条件***/
declare
@where1 varchar(1000)
if len(@Where) = 0
begin
set @where1 = ''
end
else
begin
set @where1 = ' where '+@Where
end
/***写分页sql语句***/
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)
/***输出参数@PageCount***/
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