选择显示字体大小

使用ado.net配置sql server事务处理

    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应用程序中使用事务处理是多么的简单。请记住,事务处理只有在处理一组命令时才是必要的。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons