VS2005中新的事务处理机制的引入带来前所未有的新体验(摘自 新的起点...... 博客)

由于在VS2003中的固定的事务处理方式,让我直到今天才了解到VS2005对事务新的理解与重新编写的事务机制,不但包含了数据库的事务支持,而且还被应用于其它如:文件IO处理、消息机制等可以应用事务的代码块内。

        新的事务处理架构不再与数据库绑在一起,而是从代码块的角度,当在通过 new 语句实例化 TransactionScope 时,事务管理器将确定要参与哪个事务。一经确定,此范围将始终参与该事务。

        也就是说只要是代码块是可以被事务管理器所管理的,则允许该代码块范围所参与的事务继续。如果事务范围中的代码发生了异常,它所参与的事务将回滚。也只有当应用程序完成它要在一个事务中执行的所有工作以后,您应当调用TransactionScope的Complete 方法,以通知事务管理器可以接受提交事务。如在代码块内未能调用此方法将中止该事务,也就是隐式的进行了Rollback。对 Dispose 方法的调用标志着该事务范围的结束。在调用此方法之后发生的异常不会影响该事务。

        详细的情况,请大家到MSDN中去了解。地址:http://msdn2.microsoft.com/zh-cn/library/system.transactions.transactionscope(VS.80).aspx

        OK,说了这么多,下面我将用SqlTranasction的方式与新的TransactionScope来写同一段代码,看看有什么不同。以及对编程效率及代码洁净的作用。

环境:VS2005 控制台项目 数据库(SqlServer2000中自带的Northwind) 用户表(Region)
操作:使用事务方式录入一条记录到用户表中。

static   void  Main( string [] args)
{
    
/// 看看新的事务处理带的方便性
    using (TransactionScope t = new TransactionScope())
    
{
        SqlConnection conn 
= new SqlConnection(
            
"Data Source=192.168.2.16;Initial Catalog=shlx5;User ID=sa;PWD=sa;pooling=true");
        
using (conn)
        
{
            conn.Open();
            
using (SqlCommand cmd = conn.CreateCommand())
            
{
                cmd.CommandText 
=
                    
"Insert Into application (APPLICATIONNAME,[BACKGROUND],[MAPINFO]) Values('为人民服务','1','1')";
                cmd.ExecuteNonQuery();
                
// 一直到这里,你的写法和没有进行事务操作的写法一样方便
                
// 不同的地方在下面这一句,加上就像调用了老式事务的Commit一样,上面所有的操作被提交。
                
//t.Complete();
                
//Console.WriteLine("已录入到系统中");
                Console.WriteLine("没有录入到系统中");
            }

        }

    }

    Console.ReadLine();
}

 

有人说:TransactionScope在SQL Server2000下是用不了的,只适用于SQL Server 2005的数据库,且TransactionScope有可能会自动生级成分布式事务。真的是这样吗?
性能到底有没有以前的写法高呢?
大家评论下吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值