分手快乐 发表于 2015-1-16 22:07:43

ASP网页设计ASP操纵数据库的类,让数据操纵变得复杂...

只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天关于ASP的利用者来讲,在数据库操纵上越复杂,就有更多的工夫往思索逻辑上和使用上的代码,效力也会更高。明天俺在这里给人人供应一种数据库操纵的思绪,这些代码是俺在临时的ASP使用中不休完成和修改的,也已用它完成了良多项目了,应当说间接拿往用是没有成绩的。固然自己才能也无限,但愿人人一同来会商。

申明:此帖代码均是VBScript版本。别的最好你敌手写ASP已有必定的基本。

先复杂先容一下俺这个类的一些特性:

1.可同时操纵多个分歧范例的数据库。
2.完整不必思索数据范例的不同,不再用想字符型字段加不加单引号。
3.挪用十分复杂,对数据库的次要操纵一样平常只必要一行代码。
4.撑持mssql事件回滚。
5.可主动天生和输入sql语句便利调试。


利用办法:

1.修正clsDbctrl.asp文件中的第1举动你本人的数据库地位(修正办法参考上面的CreatConn函数申明)。如需毗连多个数据库可自行增加,格局不异。

2.在你新建的asp文件中包括此asp文件。如:
<!--#includefile="Inc/clsDbctrl.asp"-->大概:
<!--#includevirtual="/Inc/clsDbctrl.asp"-->

3.利用以下代码使用此类:
一个数据库毗连:援用:

<%
OpenConn()翻开数据库毗连
Dimdb:Setdb=NewDbCtrl创建工具
YourCodeHere......
Co(db):CloseConn()开释工具,封闭数据库毗连
%>大概(一个大概多个数据库毗连):援用:

<%
Dimdb1:Setdb1=NewDbCtrl:db1.dbConn=Oc(a)
Dimdb2:Setdb2=NewDbCtrl:db2.dbConn=Oc(b)
YourCodeHere......
Co(db1):Co(db2)
%>4.详细操纵的例子能够参考各函数申明内的代码示例。

办法和属性概览(具体用法及例子鄙人面):援用:

CreatConn天生数据库毗连字符串
Oc创建数据库毗连
Co开释工具
OpenConn翻开默许数据库毗连
CloseConn封闭默许数据库毗连
dbCtrl.dbConn属性,猎取要操纵的数据库毗连,默许值为Conn
dbCtrl.dbErr属性,只读,输入捕捉的毛病信息
dbCtrl.Version属性,只读,程序版本信息
dbCtrl.AutoId办法,主动猎取独一序列号
dbCtrl.GetRecord办法,获得切合前提的记录集
dbCtrl.GetRecordBySql办法,依据sql语句获得记录集
dbCtrl.GetRecordDetail办法,依据某一条指定记录的具体数据
dbCtrl.AddRecord办法,增加一个新的记录
dbCtrl.UpdateRecord办法,依据指定前提更新记录
dbCtrl.DeleteRecord办法,删除切合前提的记录
dbCtrl.ReadTable办法,依据指定前提猎取某条记录中的其他字段的内容
dbCtrl.C办法,封闭记录集工具
dbCtrl.wGetRecord,
dbCtrl.wAddRecord,
dbCtrl.wUpdateRecord,
dbCtrl.wDeleteRecord这4个办法是获得响应的操纵(后面加w)的sql语句参数商定:

因为ASP没有Arguments工具,不克不及利用静态参数,以是,在本类的代码中,利用了Array(数组)来到达这一效果。本类中的部分参数可使用数组(参数申明中有说明),但利用数组时应参照以下格局:援用:


Array("Field1:Value1","Field2:True","Field3:100")

对,有点像json的格局,假如触及到变量,那就如许:

Array("Field1:"&Value1,"Field2:"&Value2,"Field3:"&Value3)能够如许说,本类中的几近一切与数据库字段相干的内容都能够用以上的数组格局来设置前提大概是猎取内容。而这里最年夜的特性就是在利用时不必往思索字段的范例,在字段后跟一个冒号,接着跟上响应的值就好了。假如你常常手写ASP程序的话,你很快就会感觉到使用这类体例的魅力,除数据范例不必思索以外,它也很便利随时增加和删除前提。假如你还不分明怎样用的话不妨,上面有良多例子能够申明这个成绩。

要把ASP的数据库操纵封装起来实在其实不难,信任人人之前本人也做过相似的代码或是借用过其别人的封装好的代码。可是就如列位晓得的一样,利用封装后的代码一旦堕落,排错是一个对照贫苦的事变,一样平常说来,封装后操纵越复杂的排错也越庞大。俺在写这些代码的时分已尽我所能思索到假如堕落的话怎样往排查毛病,在尽量简化用户操纵数据库的代码的同时能够随时输入sql语句排查毛病。

最初必要申明一点,本文所触及的ASP数据库操纵其实不合适年夜型数据,如你所知,操纵年夜型数据最好仍是利用存储历程之类的东东对照好,今后俺会思索把对存储历程的操纵也封装出来。另有一个效力成绩,要寻求高效力的话,用ASP仍是应当思索COM+等,以是再次声明,本类合用的工具是中小型ASP项目。

好了,上面送上具体利用申明:

一.数据库毗连

思索到年夜多半人的利用习气,在数据库毗连上利用了大众历程,以是必要人人在代码里自行修正,假如你已创建了数据库毗连,把这几行正文失落就好了。代码中内置了MSSql,Access,MySQL,Oracle4种数据库的毗连体例,固然你也能够自行在源代码中增添或删除。修正比方:援用:

Dima:a=CreatConn(0,"TestData","localhost","username","userpassword")
Dimb:b=CreatConn(1,"Data/%TestDb%.mdb","","","")申明一下,第1个参数能够是字符串。假如是利用Access,则第2个参数输出绝对路径和相对路径都是能够的,若有暗码也能够在第5个参数中输出,如:援用:

Dimc:c=CreatConn("ACCESS","E:MyWebData\%TestDB%.mdb","","","mdbpassword")相干函数:

原型:CreatConn(dbType,strDB,strServer,strUid,strPwd)
功能:创建数据库毗连字符串
前往值:String
参数:
dbType:IntegerorString毗连数据库范例
(0or"MSSQL")-MicrosoftSQLServer
(1or"ACCESS")-MicrosoftOfficeAccess
(2or"MYSQL")-MySQLServer
(3or"ORACLE")-OracleServer
strDB:String数据库名或数据库地点(Access利用相对大概绝对路径都可)
strServer:String数据库服务器地点,Access请留空
strUid:String数据库用户名,Access请留空
strPwd:String数据库暗码

原型:Oc(connStr)
功能:翻开数据库毗连
前往值:Object数据库毗连工具
参数:
connStr:String数据库毗连字符串,由CreatConn函数天生

原型:Co(obj)
功能:封闭工具
参数:
obj:Object要封闭的工具称号

原型:OpenConn
功能:翻开默许数据库毗连,会主动创建一个称号为Conn的毗连工具
参数:无

原型:CloseConn
功能:封闭称号为Conn的默许数据库毗连工具
参数:无

二.数据库操纵

上面就是本数据库操纵类的函数功效申明,应当算是手册了,请多看例子的使用。

原型:dbCtrl.dbConn(objConn)
功能:猎取数据库毗连工具
参数:
objConn:Object已创建的数据库毗连工具
举例:援用:

Dimdb:Setdb=NewDbCtrl
db.dbConn=Oc(CreatConn(1,"E:WebSiteMySiteData\%TestDb%.mdb","","",""))
Co(db)说明:此属性为可选,假如不指定此属性则默许数据毗连为页面上称号为Conn的数据库毗连工具

原型:dbCtrl.AutoID(TableName)
功能:主动猎取独一序列号(主动编号)
前往值:Integer
参数:
TableName:String必要取得独一序列号的数据表名
举例:援用:

DimnewId
newId=db.AutoId("TestTable")
Response.Write(newId)原型:dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
功能:获得切合前提的记录集
前往值:Object记录集工具
参数:
TableName:String表称号
FieldsList:String字段称号,用逗号离隔,留空则为全体字段
Condition:StringorArray查询前提,假如是数组应遵守后面的参数商定
OrderField:String排序体例
ShowN:Integer猎取记录的数目,相称于sql中的SelectTopN
举例:援用:

Dimrs
Setrs=db.GetRecord("TestTable","fId,fName,fAge","fSex=男AndIsActive=1","fNameAsc",0)
WhileNotrs.eof
Response.Write("Nameis:"&rs(1)&"Ageis:"&rs(2)&"<br/>")
rs.movenext()
Wend
db.C(rs)关于以上的例子,用上面的数组体例指定前提是等价的:援用:

Setrs=db.wGetRecord("TestTable","fId,fName,fAge",Array("fSex:男","IsActive:1"),"fNameAsc",0)别的,你能够用上面的语句来检察这个函数天生的sql语句:援用:

Response.Write(db.wGetRecord("TestTable","fId,fName,fAge",Array("fSex:男","IsActive:1"),"fNameAsc",0))如你所见,只必要在本来的函数前加一个w便可。

原型:dbCtrl.GetRecordBySQL(strSelect)
功能:依据sql语句获得记录集
前往值:Object记录集工具
参数:
strSelect:String用于天生纪录集的SQL语句
举例:援用:

Dimrs
Setrs=db.GetRecordBySQL("Selecta.Id,a.LastName,b.GroupFromUseraInnerJoinDepartbOna.GroupId=b.GroupId")
YourCodeHere...
db.C(rs)原型:dbCtrl.GetRecordDetail(TableName,Condition)
功能:依据某一条指定记录的具体数据
前往值:Object记录集工具
参数:
TableName:String表称号
Condition:StringorArray查询前提,假如是数组应遵守后面的参数商定
举例:援用:

Dimrs,Id
Id=Request.QueryString("id")
Setrs=db.GetRecordDetail("TestTable","Id="&id)
YourCodehere...
db.C(rs)说明:就像你已看出来的一样,这个最经常使用在翻开某个具体页面(好比旧事内容页面)

原型:dbCtrl.AddRecord(TableName,ValueList)
功能:增加一个新的记录
前往值:新纪录的Id号(乐成)or0(失利)
参数:
TableName:String表称号
ValueList:Array拔出表的字段和值,只能是数组且应遵守后面的参数商定
举例:援用:

DimfName,fSex,fWorkYear,fBirth
fName="王二坛"
fSex="男"
fWorkYear=12
fBirth=Cdate("1981-10-23")
Dimresult
result=db.AddRecord("TestTable",Array("Name:"&fName,"Sex:"&fSex,"WorkYear:"&fWorkYear,"Birthday:"&fBirth,"IsActive:True"))
Ifresult0Then
Response.Write("增加纪录乐成!此纪录的主动编号Id为"&result)
EndIf瞥见了吧,真的不必思索字段的范例是甚么滴。
假如你想要代码中的字段和值看得更分明一点,也能够如许写,但凭卿之所好:援用:

result=db.AddRecord("TestTable",Array("Name:"&fName,_
"Sex:"&fSex,_
"WorkYear:"&fWorkYear,_
"Birthday:"&fBirth,_
"IsActive:True"))别的,你能够用上面的语句来检察这个函数天生的sql语句:援用:

Response.Write(db.wAddRecord("TestTable",Array("Name:"&fName,"Sex:"&fSex,"WorkYear:"&fWorkYear,"Birthday:"&fBirth,"IsActive:True")))说明:前往的Id值用的是对照笨的办法,其实不能包管在并发数据量年夜的时分的正确性,慎用。

原型:dbCtrl.UpdateRecord(TableName,Condition,ValueList)
功能:依据指定前提更新记录
前往值:1(乐成)or0(失利)
参数:
TableName:String表称号
Condition:StringorArray更新前提,假如是数组应遵守后面的参数商定
ValueList:StringorArray更新的字段及值,假如是数组应遵守后面的参数商定
举例:援用:

DimfName,fWorkYear
fName="王三坛"
fWorkYear=10
Dimresult
result=db.UpdateRecord("TestTable","UId=1308",Array("Name:"&fName,"WorkYear:"&fWorkYear))
Ifresult0Then
Response.Write("更新数据乐成!")
EndIf别的,你能够用上面的语句来检察这个函数天生的sql语句:援用:

Response.Write(db.wUpdateRecord("TestTable","UId=1308",Array("Name:"&fName,"WorkYear:"&fWorkYear)))原型:dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues)
功能:删除切合前提的记录
前往值:1(乐成)or0(失利)
参数:
TableName:String表称号
IDFieldName:String表的Id字段的称号
IDValues:StringorArray删除前提,能够是由逗号离隔的多个Id号,假如是数组应遵守后面的参数商定
举例:援用:

Dimids,result
ids=Request.Form("selectid")能够假定这里猎取的值是12,34,256,314(复选框提交的值都如许)
result=db.DeleteRecord("TestTable","UId",ids)
Ifresult0Then
Response.Write("删除数据乐成!")
EndIf固然,你也能够用字符串大概数组指定别的的前提,好比:援用:

result=db.DeleteRecord("TestTable","UId","IsActive=0AndFirstName=Tom")别的,你能够用上面的语句来检察这个函数天生的sql语句:援用:

Response.Write(db.wDeleteRecord("TestTable","UId",ids))原型:dbCtrl.ReadTable(TableName,Condition,GetFieldNames)
功能:依据指定前提猎取某条记录中的其他字段的内容
前往值:String(GetFieldNames为单个字段)orArray(GetFieldNames为多个字段)
参数:
TableName:String表称号
Condition:StringorArray查询前提,假如是数组应遵守后面的参数商定
GetFieldNames:String单个字段名大概由逗号离隔的多个字段名
举例:援用:

Dimuid,result
uid=rs("postid")假定这里是页面上某个纪录会合的用户id值
result=db.ReadTable("UserTable","UId="&uid,"UserName")
Response.Write("公布者:"&result)我不能不说,在实践使用中,这个函数多是用得最多的,你下面看到的就是一个十分经常使用的例子,从一个值往猎取别的一个表中某字段值即是该值的别的一个字段的值(有点拗口,不外的确就是这个意义)。上面的例子将告知你怎样依据这个值取得多个响应的值。援用:

Dimuid,result
uid=rs("postid")假定这里是页面上某个纪录会合的用户id值
result=db.ReadTable("UserTable","UId="&uid,"UserName,UserSex,UserAge")
Response.Write("公布者:"&result(0)&"<br/>性别:"&result(1)&"<br/>岁数:"&result(2))如你所见,就这么复杂,输出多个字段称号失掉的是一个数组。

原型:dbCtrl.C(objRs)
功能:封闭记录集工具
参数:
objRs:Object页面上的某个纪录集工具
举例:援用:

Dimrs
Setrs=db.GetRecordDetail("TestTable","Id=123")
YourCodehere...
db.C(rs)这个函数下面的很多例子都用了,就未几注释了,它同等于rs.close:setrs=nothing。asp可以使用微软的activeX使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般

灵魂腐蚀 发表于 2015-1-18 20:50:25

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。

小妖女 发表于 2015-1-25 17:39:00

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

冷月葬花魂 发表于 2015-2-3 12:17:48

我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。

飘飘悠悠 发表于 2015-2-8 22:24:54

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。

精灵巫婆 发表于 2015-2-26 12:04:07

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

若相依 发表于 2015-3-8 14:53:39

下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...

只想知道 发表于 2015-3-16 03:24:34

Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write

乐观 发表于 2015-3-22 19:35:57

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
页: [1]
查看完整版本: ASP网页设计ASP操纵数据库的类,让数据操纵变得复杂...