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

分页存储过程及.NET代码

2008-06-11 09:37 363 查看
/*
author:修改schema,原作tag
description:通用分页存储过程
date:2006/09/22
*/
ALTERPROCEDUREdbo.SPY_Page
@tblNamevarchar(255),--表名
@strGetFieldsvarchar(1000),--需要返回的列
@fldNamevarchar(255),--排序的字段名
@PageSizeint,--页尺寸
@PageIndexint,--页码
@doCountbit,--返回记录总数,非0值则返回,查询表的记录总数
@OrderTypebit,--设置排序类型,非0值则降序
@strWherevarchar(1500)--查询条件(注意:不要加where)
AS
declare@strSQLvarchar(5000)--主语句
declare@strTmpvarchar(110)--临时变量
declare@strOrdervarchar(400)--排序类型

if@doCount!=0
begin
if@strWhere!='SCHEMA'
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']where'+@strWhere
else
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']'
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else
begin
if@OrderType!=0
begin
set@strTmp='<(selectmin'
set@strOrder='orderby['+@fldName+']desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set@strTmp='>(selectmax'
set@strOrder='orderby['+@fldName+']asc'
end

if@PageIndex=1
begin
if@strWhere!='SCHEMA'
set@strSQL='selecttop'+str(@PageSize)+''+@strGetFields+'from['+@tblName+']where'+@strWhere+''+@strOrder
else
set@strSQL='selecttop'+str(@PageSize)+''+@strGetFields+'from['+@tblName+']'+@strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码 
set@strSQL='selecttop'+str(@PageSize)+''+@strGetFields+'from['+@tblName+']where['+@fldName+']'+@strTmp+'(['+@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'['+@fldName+']from['+@tblName+']'+@strOrder+')astblTmp)'+@strOrder
if@strWhere!='SCHEMA'
set@strSQL='selecttop'+str(@PageSize)+''+@strGetFields+'from['+@tblName+']where['+@fldName+']'+@strTmp+'(['+@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'['+@fldName+']from['+@tblName+']where'+@strWhere+''+@strOrder+')astblTmp)and'+@strWhere+''+@strOrder
end
end

exec(@strSQL)
RETURN


.NET代码

privateconstStringm_tableName="EnterpriseList";//表名
privateconstStringm_getFields="*";//获取的字段
privateconstStringm_orderField="AddDate";//默认排序字段
privateconstBooleanm_doCount=false;//不统计总记录数
privateconstBooleanm_orderType=true;//降序
privateconstStringm_strWhere="SCHEMA";

#regionSPY_EnterpriseList_get_bysql
///
///根据条件来访列表,分页
///
///每页记录数
///页索引
///条件语句
///返回eventdirOR的集合
publicListSPY_EnterpriseList_get_bysql(Int32pageSize,Int32pageIndex,StringstrWhere)
{
IDataReaderdr=null;
try
{
Databasedb=DatabaseFactory.CreateDatabase();
Object[]paras=sql.getSqlParaToPage(m_tableName,m_getFields,m_orderField,pageSize,pageIndex,m_doCount,m_orderType,strWhere);

dr=db.ExecuteReader("SPY_Page",paras);

Listobj=newList();
while(dr.Read())
{
obj.Add(newEnterpriseList(dr));
}
returnobj;
}
catch(Exceptionex)
{
thrownewException(ex.Message);
}
finally
{
#regionfinally

if(dr!=null)
dr.Dispose();

#endregion
}
}
#endregion

#regionSPY_EnterpriseList_get_bysqlTocount
///
///根据条件来访列表,返回记录个数
///
///每页记录数
///页索引
///条件语句
///返回整形值
publicInt32SPY_EnterpriseList_get_bysqlTocount(Int32pageSize,Int32pageIndex,StringstrWhere)
{
IDataReaderdr=null;
try
{
Databasedb=DatabaseFactory.CreateDatabase();
//参数中的true表示统计总个数
Object[]paras=sql.getSqlParaToPage(m_tableName,m_getFields,m_orderField,pageSize,pageIndex,true,m_orderType,strWhere);
dr=db.ExecuteReader("SPY_Page",paras);
while(dr.Read())
{
//返回记录总个数
returnConvert.ToInt32(dr["Total"]);
}
return0;
}
catch(Exceptionex)
{
thrownewException(ex.Message);
}
finally
{
#regionfinally

if(dr!=null)
dr.Dispose();

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