ASP网页编程之使用ASP完成事件处置的办法
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。事件处置|事件处置在开辟Web使用时,无一破例地必要会见数据库,以完成对数据的查询、拔出、更新、删除等操纵。受使用逻辑的影响,偶然必要将多条数据库操纵指令构成一个事情单位(事件)。在数据库中,所谓事件是指一组逻辑操纵单位,它使数据从一种形态变更到另外一种形态。为确保数据库中数据的分歧性,应该用团圆的成组的逻辑单位操纵数据:当它全体完成时,数据的分歧性能够坚持;而当单位中的一部分操纵失利时,全部事件会被全体疏忽,一切从肇端点今后的操纵全体退回到入手下手形态。实践上,在默许体例下对数据库的每次操纵都是隐含的事件处置。本文以一个典范的用户注册程序为例,先容三种使用ASP完成事件处置的办法:基于ASP数据库组件的办理办法、基于数据库外部的事件处置机制的办理办法和基于MTS组件的办理办法。
程序功效
在SQLServer数据库中创建两个表:USER表和USERDOC表。个中USER表中寄存的是注册用户的用户名和暗码,USERDOC表中寄存的是该注册用户的团体材料,而且以用户名为索引。上面是表USER和USERDOC的界说:
CreateTableUSER(userNamevarchar(30),userPasswdvarchar(30))
CreateTableUSERDOC(userNamevarchar(30),Ageint,Sexint,PhoneNumbervarchar(20),Addressvarchar(50))
当用户哀求注册时,ASP剧本先将用户名和暗码拔出到USER表中,然后在USERDOC表中拔出用户团体信息(岁数、性别、接洽德律风和家庭住址等)。同时,使用程序还必需包管USER表中的每笔记录在USERDOC表中都有响应的纪录。
办法一
使用ASP内置ADO组件中的Connection工具能够完成对数据库操纵的事件性处置。Connection工具的部分办法以下:
●Connection.BeginTrans办法:启动一个事件;
●Connection.CommitTrans办法:完成/提交一个事件;
●Connection.RollBackTrans办法:取消/保持一个事件。
//启动一个事件操纵
<%Conn.BeginTrans%>
<%sqlText="InsertintoUSER(userName,userPasswd)values("%>
<%sqlText=sqlText&request("usrName")&","&request("usrPasswd")&")"%>
<%conn.execute(sqlText)%>
<%ifconn.Errors.Count>0then%>
<%conn.Errors.Clear%>
//假如拔出数据操纵失利,则事件向前回滚
<%conn.RollBackTrans%>
<%response.RedirctRegisterFail.html%>
<%endif%>
<%sqlText="InsertintoUSERDOC(userName,Age,Sex,PhoneNumber,Address)"%>
<%sqlText=sqlText&"values("&request("usrName")&","&request("Age")%>
<%sqlText=sqlText&","&request("PhoneNum")&","%>
<%sqlText=sqlText&request("Address")&")"%>
//实行事件单位中的第二条拔出语句
<%conn.execute(sqlText)%>
<%ifconn.Errors.Count>0then%>
<%conn.Errors.Clear%>
//假如操纵失利,则事件向前回滚
<%conn.RollBackTrans%>
<%response.RedirctRegisterFail.html%>
<%endif%>
//假如全部事件操纵实行准确,则提交事件
<%Conn.CommitTrans%>
//转向注册乐成处置页面
<%response.RedirctRegisterOk.html%>
办法二
能够使用数据库体系外部的事件处置机制,经由过程在数据库服务器中编写包括事件的存储历程,完成对数据操纵的事件处置。同时,使用ADO组件挪用存储历程,还能够依据存储历程的前往代码判别事件处置是不是实行乐成。
在数据库体系中,每条SQL语句都是一个事件。因而能够包管每条语句要末完成,要末退回到入手下手的地方。可是假如但愿一组SQL语句的操纵要末全体完成,要末全体有效,就必要使用数据库的事件处置机制来完成。
在数据库中天生存储历程的次要代码以下:
CreateprocRegisterUser(@usrNamevarchar(30),@usrPasswdvarchar(30),@ageint,@PhoneNumvarchar(20),@Addressvarchar(50))asbegin
//显现界说并入手下手一个事件
begintran
insertintoUSER(userName,userPasswd)values(@usrName,@usrPasswd)
if@@error0
begin
//操纵失利,则事件回滚
rollbacktran
//前往存储历程,并设置前往码为事件操纵失利
return-1
end
insertintoUSERDOC(userName,age,sex,PhoneNumber,Address)
values(@Usrname,@age,@PhoneNum,@Address)
if@@error0
begin
//操纵失利,则事件回滚
rollbacktran
return-1
end
//假如操纵实行准确,则提交事件
committran
return0
end
在ASP剧本中挪用数据库存储历程的次要代码以下:
<%SetComm=server.CreateObject
("ADODB.Command")%>
<%SetComm.ActiveConnection=conn%>
<%Comm.CommandType=adCmdStoredProc%>
<%Comm.CommandText="RegisterUser"%>
//创立存储历程前往参数工具
<%SetRetCode=Comm.CreateParameter
("RetCode",adInteger,adParamReturnValue)%>
//创立存储历程输出参数工具
<%SetusrName=Comm.CreateParameter("usrName",adVarchar,adParamInput,30)%>
<%SetusrPwd=Comm.CreateParameter
("usrPasswd",adVarchar,adParamInput,30)%>
<%Setage=Comm.CreateParameter("age",adInteger,adParamInput)%>
<%SetPhoneNum=Comm.CreateParameter
("PhoneNum",adVarchar,adParamInput,20)%>
<%SetAddress=Comm.CreateParameter("Address",adVarchar,adParamInput,50)%>
<%Comm.Parameters.AppendusrName%>
<%Comm.Parameters.AppendusrPwd%>
<%Comm.Parameters.Appendage%>
<%Comm.Parameters.AppendPhoneNum%>
<%Comm.Parameters.AppendAddress%>
<%Comm.Parameters("usrName")=request("usrName")%>
<%Comm.Parameters("usrPasswd")=request("usrPasswd")%>
<%Comm.Parameters("age")=request("age")%>
</p>在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的? 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
页:
[1]