1、SqlServer存储过程的事务处理方法一:--测试的表 create table tb( id int not null constraint PK_sys_zj_fielddict primary key ,aa int) --事务处理 begin tran insert into tb values(1,1) if @@error<>0 goto lb_rollback insert into tb values(1,1) if @@error<>0 goto lb_rollback insert into tb values(2,1) if @@error<>0 goto lb_rollback insert into tb values(2,1) if @@error<>0 goto lb_rollback insert into tb values(3,1) if @@error<>0 goto lb_rollback lb_commit: commit tran goto lb_ok lb_rollback: rollback tran --显示结果 lb_ok: select * from tb drop table tb方法二:--创建测试表 create table tb( id int not null constraint PK_sys_zj_fielddict primary key ,aa int) --设置选项 SET XACT_ABORT on --事务处理 begin tran insert into tb values(1,1) insert into tb values(1,1) insert into tb values(2,1) commit tran --显示结果 /*--------注意 如果这样写的话,后面的语句不会被执行,如果要执行后面的语句,要在这句后面加上GO,仅查询分析分析器支持,所以如果是在存储过程中,要保证commit tran后面没有其他语句,否则出错时,其他语句不会被执行 -----------*/ select * from tb drop table tb 2、.Net中使用事务处理SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;"); myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction(); //使用New新生成一个事务 SqlCommand myCommand = new SqlCommand(); myCommand.Transaction = myTrans;
try { myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "Update table2 set dd='23 rain street' where userid='0001'"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Record is udated."); } catch(Exception e) { myTrans.Rollback(); Console.WriteLine(e.ToString()); Console.WriteLine("Sorry, Record can not be updated."); } finally { myConnection.Close(); }http://www.cnblogs.com/tuyile006/archive/2007/04/12/710753.html说明:在SqlServer中,每条Sql语句都作为一个事务来执行,所以无论在存储过程,还是在.net代码中使用,执行单条Sql语句没有必要使用事务处理