事务处理事务是构建许多业务逻辑的一个重要方面
NET Framework 中的事务
在NET Framework 包含SystemTransactions这是一种新的命名空间完全专注于控制事务性行为开发人员将最常将SystemTransactions与某个执行上下文配合使用这是NET Framework 中的一种新结构执行上下文允许指定适用于包含在一个定义范围内的所有代码的通用信息如事务以下是应用程序如何使用该方法将一组操作组合成一个事务的示例
using SystemTransactions;
using (TransactionScope ts = new TransactionScope(Required))
{// 执行操作例如更新不同的 DBMS
tsComplete()}
位于using 块内的所有操作将成为一个事务的一部分因为它们共享其所定义的事务执行上下文本例中的最后一行调用 TransactionScope 的 Complete 方法将导致退出该块时请求提交该事务此方法还提供了内置的错误处理出现异常时会终止事务
如本例那样为新 TransactionScope 指定 Required意味着此代码将总是作为事务的一部分运行若其调用方的事务存在则加入之若不存在则创建一个新的如同在企业服务中一样还可以指定其他选项包括 RequiresNewSupported 和 NotSupported
与企业服务及其前任 MTS 和 COM+ 不同SystemsTransactions 完全专注于控制事务性行为例如事务与对象的内部状态之间不需要存在连接企业服务要求一个对象在其结束事务时被停用但 SystemsTransactions 则没有这种需要
ADONET 中的SqlClient提供程序与新的SystemTransactions命名空间相集成从而启用了称为可升级事务的行为尽管Transact SQL可以用来启动本地或分布式事务(BEGIN TRANSACTION和BEGIN DISTRIBUTED TRANSACTION)但在某些情况下(特别是在客户端/中间层编程方面)程序员可能希望编写可以在一个数据库方案或多个数据库方案中使用的组件这些方案可能包含多个SQL Server实例并且SQL Server可以自动检测到多实例访问并将事务从本地提升到多实例(分布式)即使在使用多个数据库产品或多个连接的情况下这也是可能的前提是第一个数据库(在分布式事务术语中称为资源管理器)是SQL Server在ADONET中默认情况下启用可升级的事务