进来对事物作一下总结,常用代码如下:
1 | --创建一个银行账户表 |
2 | create table bank1 |
3 | ( |
4 | id int identity(1,1) not null primary key , |
5 | CurrentMoney int not null check (CurrentMoney >1), |
6 | CurrentName nvarchar(10) |
7 | ) |
下面就是事物的操作:
01 | declare @ sum int |
02 | set @ sum =0 |
03 | begin tran |
04 | update bank1 set CurrentMoney = CurrentMoney -200 where CurrentName = 'zs' |
05 | set @ sum = @@error +@ sum |
06 | update bank1 set CurrentMoney = CurrentMoney+200 where CurrentName = 'ls' |
07 | set @ sum =@@error +@ sum |
08 | if(@ sum >0) |
09 | begin |
10 | rollback tran |
11 | print 'Error' |
12 | end |
13 | else |
14 | begin |
15 | commit tran |
16 | print 'OD' |
17 | end |
01 | Create PROC Proc_Tran |
02 | @money int , |
03 | @fromName nvarchar(10), |
04 | @toName nvarchar(10), |
05 | @msg nvarchar(10) output |
06 | as |
07 | declare @errsum int |
08 | set @errsum =0 |
09 | begin tran |
10 | update bank1 set CurrentMoney =CurrentMoney -@money where CurrentName =@fromName |
11 | set @errsum=@errsum+@@error |
12 | update bank1 set CurrentMoney =CurrentMoney +@money where CurrentName = @toName |
13 | set @errsum =@errsum +@@error |
14 | if(@errsum >0) |
15 | begin |
16 | rollback tran |
17 | print 'Error' |
18 | set @msg = '操作失败' |
19 | end |
20 | else |
21 | begin |
22 | commit tran |
23 | print 'OK' |
24 | set @msg = '操作成功' |
25 | end |
26 | declare @a nvarchar(10) |
27 | exec Proc_Tran 10, 'ls' , 'zs' ,@msg =@a output |
28 | print @a |
ADO.NET的方面操作


SqlConnection con
=
new
SqlConnection(
"
Data Source=.;Initial Catalog=Northwind;Integrated Security=True
"
);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd = new SqlCommand( " Update bank1 set CurrentMoney = CurrentMoney - 200 where CurrentName =' " + this .txtFromName.Text.Trim() + " ' " ,con);
SqlCommand cmd1 = new SqlCommand( " update bank1 set CurrentMoney = CurrentMoney + 200 where CurrentName=' " + this .txtToName.Trim() + " ' " ,con);
SqlTransaction tran = con.BeginTransaction(); // 调用SqlConnection对象的BeginTransaction方法来实例化SqlTransaction对象
try
{
cmd.ExcuteNonQuery();
cmd1.ExcuteNonQuery();
tran.commit();
}
catch (SqlException ex)
{
tran.RollBack();
}
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd = new SqlCommand( " Update bank1 set CurrentMoney = CurrentMoney - 200 where CurrentName =' " + this .txtFromName.Text.Trim() + " ' " ,con);
SqlCommand cmd1 = new SqlCommand( " update bank1 set CurrentMoney = CurrentMoney + 200 where CurrentName=' " + this .txtToName.Trim() + " ' " ,con);
SqlTransaction tran = con.BeginTransaction(); // 调用SqlConnection对象的BeginTransaction方法来实例化SqlTransaction对象
try
{
cmd.ExcuteNonQuery();
cmd1.ExcuteNonQuery();
tran.commit();
}
catch (SqlException ex)
{
tran.RollBack();
}