Sql server存储过程和C#分页类简化你的代码

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

Sqlserver存储过程和C#分页类简化你的代码!

在最近的项目中,由于要用到自定义分页的功能,本人就在网上找了个存储过程。结合C#写了个分页类。由于本人第一次写文章。写得不好,大家不要扔鸡蛋。。

下面是存储过程(sqlserver2000下通过)

--最通用的分页存储过程

-- 获取指定页的数据

CREATE PROCEDURE Pagination

@tblName varchar(255), -- 表名

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@doCount bit = 0, -- 返回记录总数, 非 0 值则返回

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = 'select count(*) as Total from ['+ @tblName +'] where '+ @strWhere

else

set @strSQL = 'select count(*) as Total from ['+ @tblName +']'

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都

--是@doCount为0的情况

else

begin

if @OrderType != 0

begin

set @strTmp = '<(select min'

set @strOrder = ' order by ['+ @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = '>(select max'

set @strOrder = ' order by ['+ @fldName +'] asc'

end

if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder

else

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])

from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from ['+ @tblName +']' + @strOrder + ') as tblTmp)'+ @strOrder

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']

from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end

exec ( @strSQL)

GO

下面是C#的代码

using System.Data ;

using System.Data.SqlClient ;

using Microsoft.ApplicationBlocks.Data ;

using System.Web ;

using System.Web.UI ;

namespace RssLayer.PageHelper

{

/**//// <summary>

/// 分页类PagerHelper 的摘要说明。

/// </summary>

public class PagerHelper

{

private string connectionString;

public PagerHelper(string tblname,string sortname,bool docount,string connectionString)

{

this.tblName = tblname;

this.fldName = sortname ;

this.connectionString = connectionString ;

this.docount = docount;

}

public PagerHelper(string tblname,bool docount,

string strGetFields, string fldName,int pagesize,

int pageindex,bool ordertype,string strwhere,string connectionString

)

{

this.tblName = tblname ;

this.docount = docount ;

this.strGetFields = strGetFields ;

this.fldName = fldName;

this.pagesize = pagesize ;

this.pageindex = pageindex;

this.ordertype = ordertype ;

this.strwhere = strwhere ;

this.connectionString = connectionString ;

}

/**//// <summary>

/// 得到记录集的构造函数

/// </summary>

/// <param name="tblname"></param>

/// <param name="strwhere"></param>

/// <param name="connectionString"></param>

public PagerHelper(string tblname,string strwhere,string connectionString)

{

this.tblName = tblname;

this.strwhere = strwhere ;

this.docount = true;

t

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航