|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
减少客户内IT专业人才缺乏带来的影响。ASP的客户员工利用浏览器进入相关的应用软件,简单易用,无需专业技术支持。 看过很多伴侣的代码,包含一些学了挺长工夫的伴侣,在对数据库的处置傍边历来不利用事务,或有些固然利用了事务处置,但并没有到达他们所预期的后果。实践上,真正要做一个贸易化的法式,对数据的事务处置是必不成少的。上面就一些事务处置的成绩谈一下我的意见。
甚么叫事务,这里我就不祥述了,感乐趣的伴侣可以本人看一下sql server的book online或是msdn。我举一个浅易的例子吧,好比说你要把一个form中的数据同时向两个相干联的表中拔出,假如不利用事务,那便可能呈现这用情形,第一个表中胜利更新后,俄然数据库呈现不测情况,第二个表的操作没有完成,如许的话有甚么了局也就不必说了。要防止这类情形,就应当利用事务,它的感化就是要不两个表都操作胜利,要不都掉败,换句话说,就是坚持数据的分歧性。详细做法是如许,在begin trans以后的一切操作只要到commit trans的时分才真正履行,假如个中有一局部操作掉败,那末就用rollback trans恢复全部事务,是数据坚持一切操作停止之前的形态。但这里需求注重的一个成绩是,假如有一局部操作掉败,但不是致命毛病,那末数据库不会停在那儿,而是持续下一条操作,直到履行到commit trans , 体系会履行那些已胜利的操作,这也就是为何有些法式虽然用了事务但仍是呈现只要局部数据被更新的情形,而不是料想的可以坚持数据的分歧性。所以准确的做法应当是在每个对数据的操作后,都应当反省一下@@error的值,假如失足则转向毛病处置局部,该局部担任履行rollback trans ,恢复全部事务。
看上面两个表,这是一个bbs的注册用户表和它的相干表。
if exists(select * from sysobjects where ID = object_id("BBSUser"))
drop table BBSUser
go
create table BBSUser
(
ID int Primary key identity not null ,
UserName varchar(20) default "" not null ,
Password varchar(10) default "" not null ,
UserType tinyint default 0 not null , --用户类型,1为斑竹
Email varchar(100) default "" not null ,
HomePage varchar(100) default "" not null ,
ICQ varchar(20) default "" not null ,
Signature varchar(255) default "" not null , --签名
Point int default 0 not null , --用户积分
)
go
if exists(select * from sysobjects where ID = object_id("BBSUserAction"))
drop table BBSUserAction
go
create table BBSUserAction
(
id int Primary key identity not null ,
UserID int default 0 not null , --用户ID
SignTime datetime default getdate() not null , --登录工夫
IP varchar(15) default "" not null , --登录IP
)
go
上面这个存储进程要完成如许一个义务,就是用户在注册完后把数据拔出这两个表,而且第二表中的UserID的值是拔出第一个表中的主动增添型字段ID,这里就用到一个技能,用到了体系变量@@identity,它的值就是最初一次拔出操作中的identity型字段的值。这个存储过程当中就用到了事务,请细心看一下代码吧,我就不多说了。
if exists (select * from sysobjects where ID = object_id("up_RegisterUser"))
drop proc up_RegisterUser
go
create proc up_RegisterUser
@a_strUserName varchar(20) , @a_strPassword varchar(10) , @a_strEmail varchar(100) ,
@a_strHomepage varchar(100) , @a_strICQ varchar(20) , @a_strSignature varchar(255) ,
@a_strIP varchar(15)
as
declare @m_strUserID int
/*由于要对两个表停止操作,所以放到事务傍边*/
begin tran --事务入手下手
insert into BBSUser values --更新BBSUser表
(
@a_strUserName , @a_strPassword , 0 , @a_strEmail ,
@a_strHomepage , @a_strICQ , @a_strSignature , 0
)
if (@@error <> 0) goto On_Error --假如操作掉败,转向毛病处置
select @m_strUserID = @@identity --保留刚拔出的ID号
insert into BBSUserAction values --更新BBSUserAction表
(
@m_strUserID , getdate() , @a_strIP
)
if (@@error <> 0) goto On_Error --假如操作掉败,转向毛病处置
commit tran --事务停止
return (0) --前往胜利码
On_Error: --毛病处置
rollback tran --恢复事务
return (-1) --前往毛病码
go
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业; 通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 |
|