.NET的事务处理有三种方法:
1,直接写入SQL。
先写SQL文,
- //存储过程:
- create procedure [SqlAcTran] As
- begin tran
- declare @UserInfoError int
- delete from [SqlAction] where username='测试'
- select @UserInfoError =@@error
- if(@UserInfoError =0)
- commit tran
- else
- rollback tran
- go
后台代码:
- protected void btn_Click(object sender, EventArgs e)
- {
- //声明一个连接
- SqlConnection con = new SqlConnection();
- con.ConnectionString=ConfigurationManager.ConnectionStrings["DSN"].ConnectionString;
- con.Open();
- SqlCommand com = new SqlCommand();
- com.Connection = con;
- com.CommandType = CommandType.StoredProcedure;
- //调用存储过程
- com.CommandText = "SqlAcTran";
- //执行
- com.ExecuteNonQuery();
- con.Close();
- }
2,Ado.Net事务处理。
后台代码:
- protected void btn_Click(object sender, EventArgs e)
- {
- SqlConnection con = new SqlConnection();
- con.ConnectionString=ConfigurationManager.ConnectionStrings["DSN"].ConnectionString;
- con.Open();
- //1:调用Connection 对象的BeginTransaction 方法来标记事务的开始。
- //启动一个事务。
- SqlTransaction myTran = con.BeginTransaction();
- //为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。
- //第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。
- SqlCommand myCom = new SqlCommand();
- myCom.Connection = con;
- //2:将Transaction 对象分配给要执行的Command的Transaction 属性。
- myCom.Transaction = myTran;
- try
- {
- myCom.CommandText = "insert into SqlAction values ('测试2','111')";
- //3:执行所需的命令。
- myCom.ExecuteNonQuery();
- myCom.CommandText = "insert into SqlAction values ('测试3','111')";
- myCom.ExecuteNonQuery();
- myTran.Commit();
- Response.Write("成功执行");
- }
- catch (Exception Ex)
- {
- myTran.Rollback();
- //创建并且返回异常的错误信息
- Response.Write(Ex.ToString());
- Response.Write("写入数据库失败");
- }
- finally
- {
- con.Close();
- }
- }
当然ADO.NET事务处理有优点和缺点,运用起来看具体情况了。
• 优点:
– 简单性
– 和数据据事务差不多的快
– 独立于数据库,不同数据库的专有代码被隐藏了
• 缺点:
– 事务不能跨越多个数据库连接
– 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
3,COM+事务(不大懂),
一般的数据库事务控制要求事务里所做的操作必须在同一个数据库内,这样在出现错误的时候才能回滚(RollBack)到初始状态。这就存在一个问题,在分布式应用程序中,我们往往需要同时操作多个数据库,使用数据库本身的事务处理,很难满足程序对事务控制的要求。在COM+中,提供了完整的事务服务,我们可以利用它来完成在分布式应用程序中的事务控制。
见http://www.cnblogs.com/yeemio/archive/2007/08/28/873355.html