在ADO.NET中使用事务保护数据的完整性(3)

ado|数据

事务在ADO.Net中

Ado.net 支持两种事务模型,这在.Net Framework 文档中作为指南有定义.事务指南手册介绍了通常应该知道的数据库事务, 它影响操作单个目标数据库.一个类通过由ado.net显示描述的事务边界使用事务类和方法能提供事务指南.在接下来的章节中,我将把重点放在事务指南上.

自动事务也是可行的,为了使用类来参与事务来协调跨多个数据源的改变.在这种情景下事务本身是在外层处理的,比如通过com+ 和 DTC. 需要了解更多自动事务的,可以参照相关自动事务.

注:当没有在你的代码中指定事务行为时,你应该注意数据库事务默认行为.比如,sql Server 默认自动模式,每个事务-Sql 语句或成功或失败.要了解哪种默认行为是希望得到的从你工作的数据源中,能帮你决定你是否显示定义事务,也可以对于你理解你的系统行为更有帮助.

事务相关类总揽

Ado.net 数据提供对象通过Connection, Command, 和Transaction 类来提供事务功能. 一个典型的事务过程类似以下:

1. 打开事务通过Connetion.BeginTransaction()

2. 通过设置Command 的Command.Transaction 属性,在事务中加入语句或存储过程.

3. 依靠提供者,选择使用 Transaction.Save() 或 Transaction.Begin() 来创建savepoint 或内嵌的事务来使能局部回滚.

4. 提交或回滚事务通过使用Transaction.Commit() 或Transaction.Rollback()

所有的数据提供者提供了同样的基本结构来处理事务,开始连接的事务,加入指令,使用事务物件来提交或回滚.

Sql Server 事务

Sql Server 数据提供对象提供事务的基本功能情况见以下的类和成员:

Class
Member
Function

SqlConnection
BeginTransaction
Open a new transaction.

SqlCommand
Transaction
Enlist the command associated with the object in an open transaction.

SqlTransaction
Save
Create a savepoint to enable a partial rollback.

SqlTransaction
Rollback
Roll back a transaction.

SqlTransaction
Commit
Commit a Transaction

Sql Server 数据提供者( 对于Sql Server 来说,OLE DB provider 也是如此) 不提供在代码中创建内嵌事务的方式, 因此内嵌事务在Sql Server并不真正的被支持.因此这儿只有一种方式来开始一个事务在SqlClient中-使用SqlConnection.BeginTransaction(). 你不能在统一个连接中打开另外一个事务,直到先前的事务被提交或回滚,因此在任何时间每个连接只有一个打开的事务.为了使用局部回滚,使用SqlTransaction.Save().

OLE DB 事务

OLE DB 数据提供者提供事务的基本功能情况见以下的类和成员:

Class
Member
Function

OleDbConnection
BeginTransaction
Open a new transaction.

OleDbCommand
Transaction
Enlist the command associated with the object in an open transaction.

OleDbTransaction
Begin
Create a nested transaction, to enable a partial rollback.

OleDbTransaction
Rollback
Roll back a transaction.

OleDbTransaction
Commit
Commit a Transaction

OLE DB 数据提供者不提供任何的方法来设置savepoints, 相反的有个Begin() 方法在OleDbTransaction物件上.这允许你创建内嵌事务(根据你的数据库)来提供类似的功能.在这种情况下你可以在单个连接中拥有多个事务.但必须记住的是显示的调用提交和回滚.

记住,.NET OLE DB数据提供者的内嵌事务依赖于你的数据库和指定的OLE DB提供者.为了成功实施内嵌事务,其必须被你的数据库和OLE DB 提供者都支持.

Oracle 事务

Oracle 数据提供者提供事务的基本功能情况见以下的类和成员:

Class
Member
Function

OracleConnection
BeginTransaction
Open a new transaction.

OracleCommand
Transaction
Enlist the command associated with the object in an open transaction.

OracleTransaction
Rollback
Roll back a transaction.

OracleTransaction
Commit
Commit a Transaction

Oracle 数据提供者不允许你指定savepoints或内嵌事务.Savepoints 被Oracle 支持,但是你不能实施它们对于当前的oracle数据提供者版本来说.事务于oracle 来说或者回滚或者提交,局部回滚是不能的.

时间: 2024-09-17 03:46:15

在ADO.NET中使用事务保护数据的完整性(3)的相关文章

在ADO.NET中使用事务保护数据的完整性(1)

ado|数据 在ADO.NET中使用事务保护你数据的完整性 Christa May 2004 小结: 当修改数据时,事务是维护数据完整性的一个关键特征. 纵览一下事务及其重要性,接下来学习如何在你的应用中使用事务保护数据. 内容 介绍 事务剖析 事务在ADO.Net中 实施事务 总结 介绍 大多数企业数据库为了在数据修改时保证数据的完整性而提供了事务这样一个特征. 维护数据的完整性目的是保证组织依赖数据的质量; 毕竟, 当你生成报表或进行一些数据驱动的处理, 你希望知道你操作的数据是正确的. 一

在ADO.NET中使用事务保护数据的完整性(2)

ado|数据 事务剖析 事务最基本上包含两个步骤 – 开始, 然后是提交或回滚. 开始调用定义了事务的边界, 同时调用提交或回滚在定义结束. 在事务边界内, 所有的执行描述被认为是完成任务的一部分, 必须作为成功或失败的一种. 如果一切都成功提交将会执行所有的数据修改, 如果有任何错误发生, 回滚将会取消修改. 所有的.Net 数据提供对象提供了类似的类和方法来完成这些操作. 孤立等级 孤立等级在事务中界定事务孤立行为. 越是孤立等级越高, 数据越不会被别的事务干扰. 许多数据库通过加锁来增强孤

在ADO.NET中使用事务保护数据的完整性(4)

ado|数据 实施事务 既然我们已经看了类和成员,让我们来看一下基本的实施情况.接下来的代码是一个简单的情况,使用事务来保证两个存储过程-一个从表中删除库存,另一个增加库存在另个表中,或同时执行,或失败. using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Da

在开发框架中使用事务进行数据的统一处理

在很多业务数据处理的场合,整条数据链的数据完整性是非常重要的,因为我们在系统里面,往往需要同时更新或者写入一些数据,如果其中任何一环处理错误,都应该逐条滚回,这种原子性的确保就是通过事务来进行的,本文介绍的这个事务处理,适用于我的所有开发框架,如Winform开发框架.混合式开发框架.Web框架等,本文主要介绍基于我的会员系统的一些事务处理案例,对事务的使用进行介绍和代码讲解. 由于上面介绍的这些框架都是基于业务逻辑层BLL层之上的,如复杂一点的混合式框架,在BLL层之上还有一个WCF服务层.或

初谈ADO.NET中利用DataAdapter进行数据操作

ado|数据     对于刚刚学习ADO.NET数据访问技术的来说,DataAdapter也许往往会令他们感到迷惑,特别是习惯于利用托拽DataAdapter控件进行开发的朋友,通过这一ADO.NET数据访问控件,我们甚至不用书写一行代码,就能完成各种需要的数据访问和操作,然而在享受快捷便利的同时,心中却总挂着一丝意犹未尽的感觉.DataAdapter控件在背后为我们做了怎样的工作?弄清楚这一点,对于喜欢探根究底的朋友,不仅乐哉悠哉,也有利于我们更它的理解ADO.NET的数据访问机制:同时对于.

Oracle数据库为了数据的完整性的嵌套事务调用的研究

oracle|数据|数据库 为了保护数据的完整性我们用了很多的方法,比如数据表的主键约束.外 键约束.触发器等等,我们今天讨论的就是在处理数据直接的事务的时 候,保存数据的完整性,比如,我在一个存储过程中Proc_SaveBill保存一 张单据,调用一个函数Func_GenerateCode来生成一个单据的编号,假如我 的这个函数是从一个存有最大编号的表中取出的并且把编号加一,大家可 能会想象的可能产生的问题,就是如果我在Proc_SaveBill中的保存之前通 过Func_GenerateCo

SQL Server中保护数据的安全选项

不同于以往所有过分宣传的数据库漏洞,以及几十个隐私和安全规范,新出现了一个让SQL Server开发人员和数据库管理员们陷入了不得不面对强势用户的尴尬境地.他们问: 你如何保护数据库中的敏感数据? 你对你的数据库使用了什么加密方法? 你如何将我们的数据与其他人的分离开来? 我们有很多不同的客户--你能加密每个数据集吗?(这是以上最坏的问题.) 虽然这些问题看上去很古怪,但是他们问出来了,你就需要知道如何应对,无论你是一个独立的软件开发人员,还是给一家大公司工作,或者是在两者之间. 许多人都这样盲

mysql中不同事务隔离级别下数据的显示效果

  事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行.也就是说,事务内的语句要么全部执行,要么一句也不执行. 事务的特性:acid,也称为事务的四个测试(原子性,一致性,隔离性,持久性) automicity:原子性,事务所引起的数据库操作,要么都完成,要么都不执行 consisitency:一致性,事务执行前的总和和事务执行后的总和是不

PHP中执行MYSQL事务解决数据写入不完整等情况

 事务可以进行模拟SQL操作,当所有的SQL都操作成功的时候才进行SQL操作,只要有一个操作失败就回滚当前事务的所有SQL操作,避免出现上面描述中出现的数据写入不完整等情况 近来稍有时间研究了下MYSQL中的事务操作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时操作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的操作会导致初始化了一张表 ,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提