Kaneboy's Blog

SharePoint & Office Zealot
随笔 - 361, 评论 - 3663, 引用 - 201

导航

关于






Passed:
SPS2003 Infrastructure√
SPS2003 Custom Applications√
TS : WSS3.0 Configuration√
TS : WSS3.0 App Development√
TS : MOSS2007 Configuration√
TS : MOSS2007 App Development√
MCPD : Web Development√

此Blog中的文章和随笔只代表作者某一时间内的个人观点或结论,不代表任何公司立场和观点,也对其正确性没有任何担保或假设。(版权声明:作者原创文章和随笔的转载,请知会作者。)

点击这里查看此blog所有SharePoint文章!

SharePoint 2007 Starter Page

SharePoint External Binary Storage
QuickPart : 用户控件包装器 for SharePoint2007






标签

每月存档

最新留言

广告

 

在.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()方法吧,呵呵。

参考资源链接:
System.Transactions命名空间
MSDNTV: Introducing System.Transactions in .NET Framework 2.0

打印 | 张贴于 2005-02-15 05:06:00 | Tag:.NET

留言反馈

#回复: System.Transactions介绍 编辑
和msdn上介绍有点出入,在用TransactionScope类时,那里说是一定要用transScope.Complete()的;
2007-07-06 22:59:00 | [匿名用户:argelice]
#.net数据操作的最佳实践 编辑
.net的数据操作方法和实践实在是太多了,最根本的就是ADO.NET。微软提供了一些最佳实践,比如OracleHelper和企业库;同时也有大量的第三方的O/RMapping解决方案,比如:Hibernate,Castle等等,在asp.net2.0推出后,微软又提供了typed dataset和DataObjectSource的解决的数据存取方法。由于项目经验的限制,所以只能说是本人的实践经验。
2007-06-04 17:50:00 | [匿名用户:钱彦云]
#模仿System.Transactions建一个轻量级的ORACLE数据库事务范围管理 编辑
但是这个框架只支持SQLSERVER,不支持ORACLE。在一个客户要求必须用ORACLE作后台数据库的项目中,我模仿该框架作了一个支持ORACLE的。Transactions提供了一个“轻量级”的、易于使用的Transaction框架。
2007-05-24 15:52:00 | [匿名用户:xugq]
#回复: System.Transactions介绍 编辑
请问楼主:

using (TransactionScope ts = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection("..."))
{
conn.Open();
Method2();
}
ts.Consistent = true;
}
public static void Method2()
{
//创建一个记录文件log.txt
}
请问这样一个事务模型,回滚事务时能否回滚Method2做作的文件修改?
2007-05-24 13:42:00 | [匿名用户:downmon]
#回复: System.Transactions介绍 编辑
transactions支持oraclecommand吗
我每次测试都报Unable to load DLL 'oramts.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)这个错

请问如何解决,谢谢

lwj.net@163.com
2007-03-01 17:31:00 | [匿名用户:LeeWenjie]
#回复: System.Transactions介绍 编辑
一旦用到dtc就需要分布式事务协调吧?
是否依旧需要域控制器进行分布式事务的协调?
TransactionScope可否在没有域控制器的情况下(或不在一个域内)进行?
2007-02-19 01:23:00 | [匿名用户:Celise]
#回复: System.Transactions介绍 编辑
ICommittableTransaction tr = Transaction.Create();
老大:我怎么找不到transaction的这个方法?
2007-02-10 01:08:00 | [匿名用户:niannian]
#System.Transactions介绍 编辑
System.Transactions介绍

在.Net Framework 2.0中,新增了一个名称空间:System.Transactions。从其名字就可以看出来,里面包含了Transaction相关的类。 System.Transactions提供了一个“轻量级”的、易于使用的Transaction框架。
2006-12-29 09:06:00 | [匿名用户:cyn_97]
#re: System.Transactions介绍 编辑
奇怪了, 我沒法 using System.Transactions
2006-11-08 02:04:00 | [匿名用户:ChiMing]
#ASP .Net 2.0事务处理 编辑
系统比较复杂,更新多个表,所以需要使用事务处理https://www.microsoft.com/china/msdn/library/webservices/asp.net/dnbdabdasamp...
2006-07-14 10:49:00 | [匿名用户:OnlyLiu]
#re: System.Transactions介绍 编辑
transactions支持oraclecommand吗
我每次测试都报Unable to load DLL 'oramts.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)这个错
2006-04-17 15:49:00 | [匿名用户:oracle]
#Net Framework 2.0 事务处理 编辑
Net Framework 2.0 事务处理
2006-03-14 18:19:00 | [匿名用户:qdzx2008]
#re: System.Transactions介绍 编辑
System.Transactions 对Oracle起作用吗?
2005-12-29 11:04:00 | [匿名用户:Luke]
#re: System.Transactions介绍 编辑
It's great!
2005-09-12 19:40:00 | [匿名用户:James]
#re: System.Transactions介绍 编辑
我在我的网站上引用了您的文章
2005-08-12 12:07:00 | [匿名用户:编写人生]
#re: System.Transactions介绍 编辑
我想在事务开始的时候,把我将要用大的所有的表全部锁住,怎么用?
2005-05-20 16:00:00 | [匿名用户:jerry]
#re: System.Transactions介绍 编辑
>如果这里数据库连接的是SqlServer2005,那么这个Transaction将不会激活一个MSDTC管理的Distributed Transaction,而是会由.Net创建一个Local Transaction,性能非常的高
对于2005,transaction是由LTM管理,而不是distribute transaction, 性能非常的高。如果这个transaction随后访问了durable resource manageer,这个transaction会被传递给resource manager 管理,性能上就是一个普通的local transaction,如果这个transaction访问了多个durable resource manage,这个transaction就会被传给DTC,就是被promote成了一个真正的 distribute transaction。
2005-03-22 17:40:00 | [匿名用户:XT]
#请问kane大哥成为MVP的条件是什么? 编辑
如何成为MVP?
2005-02-18 13:33:00 | [匿名用户:yoyo]
#re: System.Transactions介绍 编辑
好东西啊,就是不知道是否支持层级事务呢?

LOSTINET大哥模拟的那个层级事务就挺有创意的哦,呵呵
2005-02-16 11:10:00 | [匿名用户:cnlamar]
#re: System.Transactions介绍 编辑
kao,我的SqlScope要过期了....~~~~

不过不知道这个TransactionScope支持不支持子事务的回滚。..

2005-02-15 11:57:00 | [匿名用户:Lostinet]
#re: System.Transactions介绍 编辑
Maybe someday, I can understand this... but, maybe just maybe....:)
2005-02-15 09:49:00 | [匿名用户:Maybe]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.0