紫天连水

雄关漫道真如铁,而今迈步从头越
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

TransactionScope类

Posted on 2007-01-20 17:36  紫天连水  阅读(1647)  评论(1编辑  收藏  举报
.net2.0里提供的这个类在某些方面大大减少了事务处理的代码量。
TransactionScope
类可以用来标志一段代码参与一个事务,它不要求使用者与事务直接接触。 TransactionScope类可以自动管理周边的事务。看看MSN里的这段代码。
using (TransactionScope ts = new TransactionScope())
{
    
//Create and open the SQL connection.  The work done on this connection will be a part of the transaction created by the TransactionScope
    SqlConnection myConnection = new SqlConnection("server=(local)\\SQLExpress;Integrated Security=SSPI;database=northwind");
    SqlCommand myCommand 
= new SqlCommand();
    myConnection.Open();
    myCommand.Connection 
= myConnection;

    
//Restore database to near it's original condition so sample will work correctly.
    myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)";
    myCommand.ExecuteNonQuery();

    
//Insert the first record.
    myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')";
    myCommand.ExecuteNonQuery();

    
//Insert the second record.
    myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')";
    myCommand.ExecuteNonQuery();

    myConnection.Close();

                    
//Call complete on the TransactionScope or not based on input
    ConsoleKeyInfo c;
    
while (true)
    {
                            Console.Write(
"Complete the transaction scope? [Y|N] ");
        c 
= Console.ReadKey();
        Console.WriteLine();

        
if ((c.KeyChar == 'Y'|| (c.KeyChar == 'y'))
        {
            
// Commit the transaction
            ts.Complete();
            
break;
        }
        
else if ((c.KeyChar == 'N'|| (c.KeyChar == 'n'))
        {
            
break;
        }
    }
用起来好方便。