日期:2012-04-25  浏览次数:20437 次

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

Christa May 2004

小结: 当修改数据时,事务是维护数据完整性的一个关键特征. 纵览一下事务及其重要性,接下来学习如何在你的应用中使用事务保护数据.

内容

介绍

事务剖析

事务在ADO.Net中

实施事务

总结

介绍

大多数企业数据库为了在数据修改时保证数据的完整性而提供了事务这样一个特征. 维护数据的完整性目的是保证组织依赖数据的质量; 毕竟, 当你生成报表或进行一些数据驱动的处理, 你希望知道你操作的数据是正确的.

一个成功的事务必须通过”ACID”测试, 它必须如此:

· 原子性 – 所有在事务中的表述或者执行正确, 或者它们全部回滚. 所有操作集合代表或完成或失败, 而不会是剩下部分, 损坏你的数据.

· 一致性 – 所有通过事务接触的数据在逻辑上保持一致状态. 例如, 存货数量在一个消耗的表中, 这儿有相关的订单消费存货. 因此存货不能丢失.

· 孤立性 – 事务必须在没有干扰别的并发事务时或被别的并发事务干扰的情况下影响数. 这就阻止事务在没有授权信息的情况下改变数据. 大部分数据库使用上锁保证事务的孤立性.

· 持久性 – 通过事务修改的数据是永久的, 并且会持续到系统失败.

经典的例子是提交订单和订单系统 – 你已经检查了顾客的信誉等级, 创建了订单记录, 创建了订单条目, 消费订单条目从库存中, 创建运输请求, 等等. 如果这些步骤中的一步或多步失败, 其余的将失败, 你可以在一个孤立的,不可靠的库存数量,或其它的记录表格中结束数据的不一致性. 正确的使用事务阻止这种可能发生的情形. 这对于你们的DBA, 你们的公司, 和你的工作的安全性都有好处.

这就是说,记住在有必要的去使用事务. 管理事务会增加系统的开销. 使用事务也会增加系统中锁(或其它独立机制,依赖数据库)的范围, 会导致并发问题. 考虑这些情况封装到事务当中作为一个原子单元执行, 考虑在执行环境下产生的后果, 考虑部分完成时会发生什么.

事务可以使用各种原生数据库的SQL变量在服务器端实施, , 也可以使用ado.net在应用中调用. 本文章使用ado.net数据提供对象实施数据库事务. 我将以事务剖析为开始并且看它们是如何和你的数据库交互的. 然后看一下.Net Framework 提供的类是如何帮助你在数据读取代码中实现和管理事务的, 已经它们一些使用的通常场景.