ADO.NET提供了处理后台数据所需要的一切功能,并且使用起来就如同从一张表格中读取一个数据那样简单。事务处理(transaction)允许你把数据库操作归为一组,由此来保证所有的操作都能够执行。因为一旦其中的一项操作执行失败,则整个事务处理都会失败。现在让我们来看看在.NET Framework下是如何使用事务处理的。
事务处理概况
事务处理是把一组操作合并为一个逻辑上的工作单元。在系统中没有出现错误的情况下,开发人员可以使用事务处理来控制并保持事务处理中每一个动作的连续性和完整性。
使用这样的方法可能导致向两个极端情况发展:要么在事务处理中的所有操作都得到执行,要么没有任何操作得到执行。这样的方法对于实时应用程序来说非常必要。
银行业务是一个范例。事务处理应当包括从一个帐户到另一帐户的转帐过程。这一过程属于事务处理,原因是从某帐户中支出和在另一帐户存入两个动作必须被作为一个整体来执行——任何一方都不允许失败。在深入研究ADO.NET编程之前,让我们先来看看在SQL中是如何进行事务处理的。
SQL事务处理
SQL允许开发人员使用两个简单的声明来使用事务处理
Begin Transaction (启动事务处理)
Commit Transaction (提交事务处理)
在两条声明中的所有语句都成为事务处理的一部分。命令Begin Transaction位于整个事务处理的起始位置,因此其后的所有命令只有在执行到命令Commit Transaction时才会被一并执行。ADO.NET方法就这么简单。
ADO.NET事务处理
事务处理需要一个数据库连接以及一个事务处理对象。在SQL Server和ADO.NET中使用事务处理的难点在于SqlTransaction类。此类名称随所使用的数据库平台的不同而会有一些变化。例如,对于OLEDB数据库来说,事务处理类名为OleDbTransaction。
System.Data.SqlClient namespace包括了SqlTransaction类。此类包括了两个属性:
Connection:指示同事务处理相关联的SqlConnection对象;
IsolationLevel:定义事务处理的IsolationLevel。
属性IsolationLevel是包括如下成员的枚举对象:
Chaos:从高度独立的事务处理中出现的pending changes不能被覆盖;
ReadCommitted:当数据需要被非恶意读取时,采用共享锁定(shared locks),但数据仍然可以在事务处理结束时被更新,这造成了非重复性的数据读取(nonrepeatable reads)或phantom data的产生;
ReadUncommitted:恶意读取数据是可能发生的,这表示没有使用共享锁定(shared locks),并且没有实现独占锁定(exclusive locks);
RepeatableRead:锁定查询中所用到的所有数据,由此避免其他用户对数据进行更新。在phantom rows仍然可用的状态下,这可以避免非重复性的数据读取(nonrepeatable reads);
Serialisable:在DataSet中进行范围锁定,由此防止其他用户在事务处理结束之前更新数据或在数据库中插入行;
IsolationLevel定义锁定记录的级别,但这一概念不在本文论述范围之内。对象SqlTransaction也提供了类似的方法。你可以使用以下方法来进行事务处理:
Commit:提交数据库事务处理;
Rollback:从未决状态(pending state)反转(roll back)事务处理。事务处理一旦被提交后即不能执行此操作;
Save:在事务处理中创建savepoint可以对事务处理的一部分进行反转,并且指定savepoint名称。
以下的C#示例将这些部分综合起来。
这一简单的控制台程序将通过以下步骤将两行插入到Northwind数据库的表格中:
调用Connection对象的BeginTransaction方法以标记事务处理的起始位置。BeginTransaction方法对事务处理返回了一个坐标(reference),此坐标被指定给事务处理所用到的Command对象。
将Transaction对象指定给将要执行的Command的Transaction属性。如果某Command在活动Transaction中的Connection上被执行,并且Transaction对象还没有被指定到Command的Transaction属性,则会产生一个异常。
调用Transaction对象的Commit方法来结束事务处理,或者调用Rollback方法来取消事务处理。
等价的VB.NET代码与之类似。
事务处理结束
尽管这是一个简单的示例,但它还是充分显示了在.NET应用程序中使用事务处理是多么的简单。请记住,事务处理只有在处理一组命令时才是必要的。
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>