在.Net Framework 2.0中,新增了一个名称空间:System.Transactions。从其名字就可以看出来,里面包含了Transaction相关的类。System.Transactions提供了一个“轻量级”的、易于使用的Transaction框架。
在以前,要实现Transaction需要利用EnterpriseServices,让组件从ServiceComponent继承下来。而通过System.Transactions,只要简单的几行代码,不需要继承,不需要Attribute标记,呵呵。
下面介绍System.Transactions中最简单的(也可能是以后最常见的)用法:
using (TransactionScope ts = new TransactionScope())
{
// 在这里编写需要具备Transaction的代码
ts.Consistent = true;
}
TransactionScope类用来构建一个Transaction Scope,在这个Scope里面的代码将具备Transaction的能力。TransactionScope实现了Idisposable,在调用TransactionScope.dispose()的时候,如果Consistent属性没有被设置成true,那么就将会触发Rollback动作。
using (TransactionScope ts = new TransactionScope())
{
using (sqlConnection conn = new sqlConnection("..."))
{
conn.open();
}
ts.Consistent = true;
}
上面的代码就演示了在一个Transaction Scope里面,打开一个数据库连接。这个数据库连接由于处在一个Transaction Scope里面,所以会自动获得Transaction的能力。如果这里数据库连接的是sqlServer2005,那么这个Transaction将不会激活一个MSDTC管理的distributed Transaction,而是会由.Net创建一个Local Transaction,性能非常的高。但是如果是sqlServer2000或者7,那么则会自动激活一个distributed Transaction,在性能上遭受一定的损失。
using (TransactionScope ts = new TransactionScope())
{
using (sqlConnection conn = new sqlConnection("..."))
{
conn.open();
using (sqlConnection conn2 = new sqlConnection("..."))
{
conn2.open();
}
}
ts.Consistent = true;
}
这个例子更加充分的说明了Transaction Scope的强大,两个数据库连接!虽然上面的conn和conn2是两个不同的连接对象,可能分别连接到不同的数据库,但是由于它们处在一个Transaction Scope中,它们就具备了“联动”的Transaction能力。在这里,将自动激活一个MSDTC管理的distributed Transaction。(可以通过打开管理中心里面的组件服务,来察看当前的distributed Transaction列表。)
下面再介绍如何手动将一项资源(Resource)参与(enlist)到一个分布式事务中:
ICommittableTransaction tr = Transaction.Create(); using (sqlConnection conn = new sqlConnection("...")) { conn.EnlistTransaction(tr as ITransaction); } tr.Commit(); 上面的代码手工创建了一个ICommittableTransaction对象(通过Transaction类的static方法)。sqlConnection对象通过EnlistTransaction()方法参与到这个Transaction中去。注意:EnlistTransaction()方法只接受ITransaction类型,因为ITransaction没有Commit()方法,你肯定不会希望ICommittableTransaction之外的其他对象来执行Commit()方法吧,呵呵。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。