Transaction事务(引用msdn)

之前开发.net  系统喜欢用ado.net  的事务,偶然间发现.net 中有system.transaction命名空间。里面的transaction事务更好用。

 

首先我们要引用.net 命名空间中的System.Transactions;

 

一般的写法是:

// Create the TransactionScope
using (TransactionScope ts = new TransactionScope())
{
    using (SqlConnection cn2005 = new SqlConnection(someSql2005))
    {
        SqlCommand cmd = new SqlCommand(sqlUpdate, cn2005);
        cn2005.Open();
        cmd.ExecuteNonQuery();
    }

    using (SqlConnection cn2005 = new SqlConnection(anotherSql2005))
    {
        SqlCommand cmd = new SqlCommand(sqlDelete, cn2005);
        cn2005.Open();
        cmd.ExecuteNonQuery();
    }

    // Tell the transaction scope that the transaction is in
    // a consistent state and can be committed
    ts.Complete();

    // When the end of the scope is reached, the transaction is
    // completed, committed, and disposed.
}

TransactionScope 类是 System.Transactions 的核心所在。这个类经过实例化,就会创建出一个当前事务(也称为氛围事务 (ambient transaction)),任何资源管理器都可以参与这个事务。举例来说,假设我们已经创建了 TransactionScope 的一个实例,并打开了与某个资源管理器的连接,这个资源管理器的默认设置是自动参与事务,因此,这个连接也将加入到事务范围内。


您可以在代码的任何位置上随时检查是否存在事务范围,具体方法就是查看 System.Transactions.Transaction.Current 属性。如果这个属性为“null”,说明不存在当前事务。资源管理器在打开它与其资源的连接时,它会检查是否存在事务。如果这个资源管理器已被设置为自动参与当前事务,那么它将加入到这个事务中。SQL Server 连接字符串的属性之一就是 auto-enlist。默认情况下,auto-enlist 设置为 true,因此,它会加入到任何活动事务中。您也可以通过给连接字符串显式添加一个“auto-enlist=false”来改变默认设置,如下所示:
 
Server=(local)\SQL2005;Database=Northwind;
Integrated Security=SSPI;auto-enlist=false
这就是 System.Transactions 的神奇之处。我并没有改变图 1 中的任何 ADO.NET 代码,但它却依然能够充分利用 TransactionScope。我所做的只是创建了一个 TransactionScope 对象,以及一个在连接打开后参与到活动事务中的 SqlConnection 对象。



更改 TransactionScope 类的默认设置,您可以创建一个 TransactionOptions 对象,然后通过它在 TransactionScope 对象上设置隔离级别和事务的超时时间。TransactionOptions 类有一个 IsolationLevel 属性,通过这个属性可以更改隔离级别,例如从默认的可序列化 (Serializable) 改为 ReadCommitted,甚至可以改为 SQL Server 2005 引入的新的快照 (Snapshot) 级别。(请记住,隔离级别仅仅是一个建议。大多数数据库引擎会试着使用建议的隔离级别,但也可能选择其他级别。)此外,TransactionOptions 类还有一个 TimeOut 属性,这个属性可以用来更改超时时间(默认设置为 1 分钟)。
更多内容请参照:http://msdn.microsoft.com/zh-cn/magazine/cc163527.aspx



posted @ 2012-05-15 17:38  庸蛹  阅读(556)  评论(0编辑  收藏  举报