剖析概括ADO.NET执行事务

事务往往是我们很难处理的一部分,这里结合我的经验和大家来谈谈关于ADO.NET执行事务。如果要将多项任务绑定在一起,使其作为单个工作单元来执行,可以使用ADO.NET中的事务。例如,假设应用程序执行两项任务。首先使用订单信息更新表。然后更新包含库存信息的表,将已订购的商品记入借方。如果任何一项任务失败,两个更新均将回滚。

创新互联公司专业成都网站建设、网站建设,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文营销等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

确定事务类型

事务如果是单阶段事务,并且由数据库直接处理,则属于本地事务。事务如果由事务监视程序进行协调并使用故障保护机制(例如两阶段提交)解决事务,则属于分布式事务。每个.NETFramework数据提供程序使用自己的Transaction对象来执行本地事务。如果要求在SQLServer数据库中执行,请选择System.Data.SqlClient事务。对于Oracle事务,使用System.Data.OracleClient提供程序。此外,还提供了一个新的DbTransaction类,用于编写需要事务并且与提供程序无关的代码。

在服务器上执行时,事务最有效。如果使用的SQLServer数据库广泛使用显式事务,应考虑使用Transact-SQLBEGINTRANSACTION语句以存储过程的形式编写这些事务。有关执行服务器端事务的更多信息,请参见“SQLServer联机图书”。

使用单个连接ADO.NET执行事务

在ADO.NET中,使用Connection对象控制事务。可以使用BeginTransaction方法启动本地事务。开始事务后,可以使用Command对象的Transaction属性在该事务中登记一个命令。然后,可以根据事务组件的成功或失败,提交或回滚在数据源上进行的修改。不应对本地事务使用EnlistDistributedTransaction方法。

#T#事务的作用域限于该连接。以下示例执行显式事务,该事务由try块中两个独立的命令组成。这两个命令对AdventureWorksSQLServer2005示例数据库的Production.ScrapReason表执行INSERT语句,如果没有引发异常,则提交。如果引发异常,catch块中的代码将回滚事务。如果在事务完成之前事务中止或连接关闭,事务将自动回滚。

按照下列步骤ADO.NET执行事务。
1.调用SqlConnection对象的BeginTransaction方法,以标记事务的开始。BeginTransaction方法返回对事务的引用。此引用分配给在事务中登记的SqlCommand对象。
2.将Transaction对象分配给要执行的SqlCommand的Transaction属性。如果在具有活动事务的连接上执行命令,并且尚未将Transaction对象配给Command对象的Transaction属性,则会引发异常。
3.执行所需的命令。
4.调用SqlTransaction对象的Commit方法完成事务,或调用Rollback方法结束事务。如果在Commit或Rollback方法执行之前连接关闭或断开,事务将回滚。

以下代码示例演示对MicrosoftSQLServer使用ADO.NET的事务逻辑。

 
 
  1. UsingconnectionAsNewSqlConnection(connectionString)  
  2. connection.Open()  
  3.  
  4. 'Startalocaltransaction.  
  5. DimsqlTranAsSqlTransaction=connection.BeginTransaction()  
  6.  
  7. 'Enlistacommandinthecurrenttransaction.  
  8. DimcommandAsSqlCommand=connection.CreateCommand()  
  9. command.Transaction=sqlTran 
  10.  
  11. Try  
  12. 'Executetwoseparatecommands.  
  13. command.CommandText=_ 
  14. "INSERTINTOProduction.ScrapReason(Name)VALUES('Wrongsize')"  
  15. command.ExecuteNonQuery()  
  16. command.CommandText=_ 
  17. "INSERTINTOProduction.ScrapReason(Name)VALUES('Wrongcolor')"  
  18. command.ExecuteNonQuery()  
  19.  
  20. 'Committhetransaction  
  21. sqlTran.Commit()  
  22. Console.WriteLine("Bothrecordswerewrittentodatabase.")  
  23.  
  24. CatchexAsException  
  25. 'Handletheexceptionifthetransactionfailstocommit.  
  26. Console.WriteLine(ex.Message)  
  27.  
  28. Try  
  29. 'Attempttorollbackthetransaction.  
  30. sqlTran.Rollback()  
  31.  
  32. CatchexRollbackAsException  
  33. 'ThrowsanInvalidOperationExceptioniftheconnection  
  34. 'isclosedorthetransactionhasalreadybeenrolled  
  35. 'backontheserver.  
  36. Console.WriteLine(exRollback.Message)  
  37. EndTry  
  38. EndTry  
  39. EndUsing  

网站标题:剖析概括ADO.NET执行事务
网页链接:http://www.csdahua.cn/qtweb/news17/270667.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网