代码改变世界

学习事务

2010-01-22 19:10  三皮开发时  阅读(172)  评论(0编辑  收藏  举报

事务和存储过程的联系
create procedure SP_Transaction
@AccountBalance float,
@AccountName nchar(20)
as

--声明一个变量用来标记事务,如果更改数据没错就提交事务,否则回滚
declare @Sign bit
select @Sign=0

--事务的开始
begin transaction

--修改 客户ID=1 的 账户余额=100
update 客户 set 账户余额=@AccountBalance where 客户ID=1
--如果没错的话就修改 客户ID=2 的账户 姓名=’李建‘
if @@error=0 and @@rowcount=1  --@@error 表示无错误,--@@rowcount 表示影响行
 
begin
 --修改 客户ID=2 的账户 姓名=’李建‘
update 客户 set 姓名=@AccountName where 客户ID=2
--如果没错的话 GO ON....
if @@error=0 and @@rowcount=1
select @Sign=1
end

if @Sign=1
commit transaction
 else rollback transaction

exec  SP_Transaction
@AccountBalance=100.0000,
@AccountName='李建'


drop procedure SP_Transaction

 

--不同数据库的事务
begin transaction
declare @sign bit
 select @sign=0
use ado
update 客户 set 账户余额=100 where 客户ID=2
use Student
insert into Student values(6,'ado','男','21','CS')
select @sign=1
if @sign=1
 commit transaction
else
 rollback transaction

--use Student
--delete Student where Sno=5
--update Student set Sno=5 where Sno=6

 

要使用--分布式事务
需要
添加引用 TransactionScope
才能
using System.TransactionScope
控制面板--管理工具--服务--找到Distributed Transaction Coordinator-- 手动
在doc下 net start msdtc
然后才能编译程序