.NET开发中的事务处理大比拼 之 ADO.NET级别的事务

现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的 C# 开发者,我们已经熟知编写数据库交互程序的一些要点,即:
1 )使用 SqlConnection 类的对象的 Open() 方法建立与数据库服务器的连接。
2 )然后将该连接赋给 SqlCommand 对象的 Connection 属性。
3 )将欲执行的 SQL 语句赋给 SqlCommand CommandText 属性。
4 )通过 SqlCommand 对象进行数据库操作。
创建一个 ADO.NET 事务是很简单的,需要定义一个 SqlTransaction 类型的对象。 SqlConnection  OleDbConnection 对象都有一个  BeginTransaction  方法,它可以返回  SqlTransaction  或者 OleDbTransaction  对象。然后赋给 SqlCommand 对象的 Transcation 属性,即实现了二者的关联。为了使事务处理可以成功完成,必须调用 SqlTransaction 对象的 Commit() 方法。如果有错误,则必须调用 Rollback() 方法撤销所有的操作。
代码示例:
基于以上认识,下面我们就开始动手写一个基于 ADO.NET 的事务处理程序。 (示例位置:光盘 \code\ch05\04\Web\WebForm2
string conString = "data source=127.0.0.1;database=codematic;user id=sa;
password=";
SqlConnection myConnection = new SqlConnection(conString);
myConnection.Open();
 
//启动一个事务
SqlTransaction myTrans = myConnection.BeginTransaction();
 
//为事务创建一个命令
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
    myCommand.CommandText = "update P_Product set Name='电脑2' where Id=52";
    myCommand.ExecuteNonQuery();
    myCommand.CommandText = "update P_Product set Name='电脑3' where Id=53";
    myCommand.ExecuteNonQuery();
    myTrans.Commit();//提交
    Response.Write("两条数据更新成功");
}
catch (Exception ex)
{
    myTrans.Rollback();//遇到错误,回滚
    Response.Write(ex.ToString());               
}
finally
{
    myConnection.Close();
}
ADO.NET 事务的优势和限制如下。
优势:
l  简单。
l  和数据库事务差不多快。
l  事务可以跨越多个数据库访问。
l  独立于数据库,不同数据库的专有代码被隐藏了。
限制:事务执行在数据库连接层上,所以需要在执行事务的过程中手动地维护一个连接。

注  意
所有命令都必须关联在同一个连接实例上,ADO.NET事务处理不支持跨多个连接的事务处理。
 
      选自 《亮剑.NET. .NET深入体验与实战精要》 一书 5.4 节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值