事务往往是我们很难处理的一部分,这里结合我的经验和大家来谈谈关于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的事务逻辑。
- UsingconnectionAsNewSqlConnection(connectionString)
- connection.Open()
- 'Startalocaltransaction.
- DimsqlTranAsSqlTransaction=connection.BeginTransaction()
- 'Enlistacommandinthecurrenttransaction.
- DimcommandAsSqlCommand=connection.CreateCommand()
- command.Transaction=sqlTran
- Try
- 'Executetwoseparatecommands.
- command.CommandText=_
- "INSERTINTOProduction.ScrapReason(Name)VALUES('Wrongsize')"
- command.ExecuteNonQuery()
- command.CommandText=_
- "INSERTINTOProduction.ScrapReason(Name)VALUES('Wrongcolor')"
- command.ExecuteNonQuery()
- 'Committhetransaction
- sqlTran.Commit()
- Console.WriteLine("Bothrecordswerewrittentodatabase.")
- CatchexAsException
- 'Handletheexceptionifthetransactionfailstocommit.
- Console.WriteLine(ex.Message)
- Try
- 'Attempttorollbackthetransaction.
- sqlTran.Rollback()
- CatchexRollbackAsException
- 'ThrowsanInvalidOperationExceptioniftheconnection
- 'isclosedorthetransactionhasalreadybeenrolled
- 'backontheserver.
- Console.WriteLine(exRollback.Message)
- EndTry
- EndTry
- EndUsing
网站标题:剖析概括ADO.NET执行事务
网页链接:http://www.csdahua.cn/qtweb/news17/270667.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网