ASP.NET网站制作之Sql server存储历程和C#分页类简化你的...
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)server|sql|存储历程|分页Sqlserver存储历程和C#分页类简化你的代码!在比来的项目中,因为要用到自界说分页的功效,自己就在网上找了个存储历程。分离C#写了个分页类。因为自己第一次写文章。写得欠好,人人不要扔鸡蛋。。
上面是存储历程(sqlserver2000下经由过程)
--最通用的分页存储历程
--猎取指定页的数据
CREATEPROCEDUREPagination
@tblNamevarchar(255),--表名
@strGetFieldsvarchar(1000)=*,--必要前往的列
@fldNamevarchar(255)=,--排序的字段名
@PageSizeint=10,--页尺寸
@PageIndexint=1,--页码
@doCountbit=0,--前往纪录总数,非0值则前往
@OrderTypebit=0,--设置排序范例,非0值则降序
@strWherevarchar(1500)=--查询前提(注重:不要加where)
AS
declare@strSQLvarchar(5000)--主语句
declare@strTmpvarchar(110)--一时变量
declare@strOrdervarchar(400)--排序范例
if@doCount!=0
begin
if@strWhere!=
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!=
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!=
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)
GO
上面是C#的代码
usingSystem.Data;
usingSystem.Data.SqlClient;
usingMicrosoft.ApplicationBlocks.Data;
usingSystem.Web;
usingSystem.Web.UI;
namespaceRssLayer.PageHelper
{
/**////<summary>
///分页类PagerHelper的择要申明。
///</summary>
publicclassPagerHelper
{
privatestringconnectionString;
publicPagerHelper(stringtblname,stringsortname,booldocount,stringconnectionString)
{
this.tblName=tblname;
this.fldName=sortname;
this.connectionString=connectionString;
this.docount=docount;
}
publicPagerHelper(stringtblname,booldocount,
stringstrGetFields,stringfldName,intpagesize,
intpageindex,boolordertype,stringstrwhere,stringconnectionString
)
{
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>
///<paramname="tblname"></param>
///<paramname="strwhere"></param>
///<paramname="connectionString"></param>
publicPagerHelper(stringtblname,stringstrwhere,stringconnectionString)
{
this.tblName=tblname;
this.strwhere=strwhere;
this.docount=true;
this.connectionString=connectionString;
}
privatestringtblName;
publicstringTblName
{
get{returntblName;}
set{tblName=value;}
}
privatestringstrGetFields="*";
publicstringStrGetFields
{
get{returnstrGetFields;}
set{strGetFields=value;}
}
privatestringfldName=string.Empty;
publicstringFldName
{
get{returnfldName;}
set{fldName=value;}
}
privateintpagesize=10;
publicintPageSize
{
get{returnpagesize;}
set{pagesize=value;}
}
privateintpageindex=1;
publicintPageIndex
{
get{returnpageindex;}
set{pageindex=value;}
}
privatebooldocount=false;
publicboolDoCount
{
get{returndocount;}
set{docount=value;}
}
privateboolordertype=false;
publicboolOrderType
{
get{returnordertype;}
set{ordertype=value;}
}
privatestringstrwhere=string.Empty;
publicstringStrWhere
{
get{returnstrwhere;}
set{strwhere=value;}
}
publicIDataReaderGetDataReader()
{
if(this.docount)
{
thrownewArgumentException("要前往纪录集,DoCount属性必定为false");
}
//System.Web.HttpContext.Current.Response.Write(pageindex);
returnSqlHelper.ExecuteReader(connectionString,CommandType.StoredProcedure,"Pagination",
newSqlParameter("@tblName",this.tblName),
newSqlParameter("@strGetFields",this.strGetFields),
newSqlParameter("@fldName",this.fldName),
newSqlParameter("@PageSize",this.pagesize),
newSqlParameter("@PageIndex",this.pageindex),
newSqlParameter("@doCount",this.docount),
newSqlParameter("@OrderType",this.ordertype),
newSqlParameter("@strWhere",this.strwhere)
);
}
publicDataSetGetDataSet()
{
if(this.docount)
{
thrownewArgumentException("要前往纪录集,DoCount属性必定为false");
}
returnSqlHelper.ExecuteDataset(connectionString,CommandType.StoredProcedure,"Pagination",
newSqlParameter("@tblName",this.tblName),
newSqlParameter("@strGetFields",this.strGetFields),
newSqlParameter("@fldName",this.fldName),
newSqlParameter("@PageSize",this.pagesize),
newSqlParameter("@PageIndex",this.pageindex),
newSqlParameter("@doCount",this.docount),
newSqlParameter("@OrderType",this.ordertype),
newSqlParameter("@strWhere",this.strwhere)
);
}
publicintGetCount()
{
if(!this.docount)
{
thrownewArgumentException("要前往总数统计,DoCount属性必定为true");
}
return(int)SqlHelper.ExecuteScalar(connectionString,CommandType.StoredProcedure,"Pagination",
newSqlParameter("@tblName",this.tblName),
newSqlParameter("@strGetFields",this.strGetFields),
newSqlParameter("@fldName",this.fldName),
newSqlParameter("@PageSize",this.pagesize),
newSqlParameter("@PageIndex",this.pageindex),
newSqlParameter("@doCount",this.docount),
newSqlParameter("@OrderType",this.ordertype),
newSqlParameter("@strWhere",this.strwhere)
);
}
}
}
怎样挪用???
假设我已创建了2个类。一个是FavList数据库实体类,一个FavListCollection汇合类。FavListCollection存储了FavList实体类的汇合。
我能够如许写一个办法。
/**////<summary>
///前往FavList汇合,利用存储历程自界说分页。
///</summary>
///<paramname="userid">数据库FavList的字段,用户ID</param>
///<paramname="strwhere">查找的前提</param>
///<paramname="ordertype">排序,true暗示Desc,false暗示asc</param>
///<paramname="fldname">排序的字段,只能是一个字段</param>
///<paramname="pagesize">每页的纪录数</param>
///<paramname="pageindex">到第几页的参数,由1入手下手。1暗示第一页,以此类推。</param>
///<paramname="recordcount">总纪录数。</param>
///<returns></returns>
publicoverrideFavListCollectionGetFavListsByUser(intuserid,stringstrwhere,
boolordertype,stringfldname,intpagesize,
intpageindex,outintrecordcount
)
{
recordcount=0;
PagerHelperhelper=newPagerHelper("Vfavlist",strwhere,ConnectionString);//VFavList是View
recordcount=helper.GetCount();
PagerHelperhelper2=newPagerHelper("Vfavlist",false,"*",fldname,
pagesize,pageindex,ordertype,strwhere,ConnectionString);
IDataReaderdr=helper2.GetDataReader();
FavListCollectionlist=newFavListCollection();
while(dr.Read())
{
list.Add(PopulateFavList(dr));
}
dr.Close();
returnlist;
}
DataGrid挪用就不必说了吧。。
关于该分页的Bug和范围性
Bug:当排序谁人字段内容不异的时分(比方:定时间来排序,而工夫是一样的话。前面的纪录会显现不出来。自己测试过)
范围性:排序只能一个字段,不克不及凌驾一个
出处:BLOG永不言拜
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
页:
[1]