使用ADO.NET配置SQLServer事务处理

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
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应用程序中使用事务处理是多么的简单。请记住,事务处理只有在处理一组命令时才是必要的。

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
(1)系统管理模块包括切换系统,系统设置,退出系统这几个功能。切换系统能弹出登录界面方便另外一位用户使用系统;系统设置包括用户密码修改、主界面网页设定、系统风格选择,用户在登入系统后可进入用户密码修改模块更改自己的密码;主界面网页设定的作用是更改每个角色登陆到系统看到的主菜单界面的网页的url,可以设定不同角色的用户进入系统后看到的网页内容是不同的。系统风格设置可以改变系统的风格,选择用户喜欢的风格。退出系统能关闭所有使用的资源,退出整个系统。 (2)人事管理模块包括员工信息管理和系统用户管理。其中,员工信息管理能对普通员工的信息执行增删改查等操作,系统用户管理能对系统用户的信息进行增删改查。 (3)菜单管理模块能够对菜单的编号、名称、价格、分类等执行增删改查操作。 (4)报表统计模块能对员工的学历信息以图表的形式统计并展现;通过大量的消费数据得出顾客喜欢的菜品以及喜欢的菜品组合,并用饼图进行反应,方便管理人员作出正确的决策; 库存信息统计能够很直观的反应当前库存的状况;历史账单统计能够让用户一览流水数据。除此之外,报表还可以以word、excel、pdf等形式导出。 (5)库存管理模块能够实现对物料的编号、名称、单价、数量、分类等的增删改查管理。 (6)订餐及收款模块包含预定、退订、点菜、结账等功能。席位共有20个,未预定时桌位的颜色是绿色的,点击预定后桌位变为黄色,并弹出顾客信息登记界面,包括客户的编号、姓氏、电话、已预订的桌位号以及预定时间,且已经预定的桌位不能再次订餐。点击退订能对已经定的桌位进行退订,退订后桌位颜色变为绿色,对于已经就餐的桌位不能退订。已预订或未预定的桌位均能点菜,点菜时弹出点菜界面,包括已点的菜品及每份菜的数量,点菜之后餐桌颜色变为红色。结账模块用来对已经就餐的餐桌结账,结账界面的信息包括桌号,消费清单,应付款。输入实收金额,自动计算找零金额。并显示当前的操作员及操作时间,点击完成将以上信息写入数据库,打印按钮的操作状态变为可操作,点击打印按钮能够打印顾客回执
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值