仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 769|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之Sql server存储历程和C#分页类简化你的...

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我之所以想学。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。
再见西城 该用户已被删除
沙发
发表于 2015-1-19 16:42:31 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
若天明 该用户已被删除
板凳
发表于 2015-1-28 08:44:06 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
地板
发表于 2015-2-5 17:31:50 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
因胸联盟 该用户已被删除
5#
发表于 2015-2-13 02:07:55 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
透明 该用户已被删除
6#
发表于 2015-3-3 12:55:31 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
山那边是海 该用户已被删除
7#
发表于 2015-3-11 11:11:12 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
海妖 该用户已被删除
8#
发表于 2015-3-18 07:59:38 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
爱飞 该用户已被删除
9#
发表于 2015-3-25 14:09:28 | 只看该作者
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 16:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表