zoukankan      html  css  js  c++  java
  • TransactionScope 类

    使代码块成为事务性代码。此类不能被继承。

    http://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope.aspx

    // This function takes arguments for 2 connection strings and commands to create a transaction 
    // involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the
    // transaction is rolled back. To test this code, you can connect to two different databases
    // on the same server by altering the connection string, or to another 3rd party RDBMS by
    // altering the code in the connection2 code block.
    static public int CreateTransactionScope(
    string connectString1, string connectString2,
    string commandText1, string commandText2)
    {
    // Initialize the return value to zero and create a StringWriter to display results.
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();

    try
    {
    // Create the TransactionScope to execute the commands, guaranteeing
    // that both commands can commit or roll back as a single unit of work.
    using (TransactionScope scope = new TransactionScope())
    {
    using (SqlConnection connection1 = new SqlConnection(connectString1))
    {
    // Opening the connection automatically enlists it in the
    // TransactionScope as a lightweight transaction.
    connection1.Open();

    // Create the SqlCommand object and execute the first command.
    SqlCommand command1 = new SqlCommand(commandText1, connection1);
    returnValue = command1.ExecuteNonQuery();
    writer.WriteLine("Rows to be affected by command1: {0}", returnValue);

    // If you get here, this means that command1 succeeded. By nesting
    // the using block for connection2 inside that of connection1, you
    // conserve server and network resources as connection2 is opened
    // only when there is a chance that the transaction can commit.
    using (SqlConnection connection2 = new SqlConnection(connectString2))
    {
    // The transaction is escalated to a full distributed
    // transaction when connection2 is opened.
    connection2.Open();

    // Execute the second command in the second database.
    returnValue = 0;
    SqlCommand command2 = new SqlCommand(commandText2, connection2);
    returnValue = command2.ExecuteNonQuery();
    writer.WriteLine("Rows to be affected by command2: {0}", returnValue);
    }
    }

    // The Complete method commits the transaction. If an exception has been thrown,
    // Complete is not called and the transaction is rolled back.
    scope.Complete();

    }

    }
    catch (TransactionAbortedException ex)
    {
    writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
    }
    catch (ApplicationException ex)
    {
    writer.WriteLine("ApplicationException Message: {0}", ex.Message);
    }

    // Display messages.
    Console.WriteLine(writer.ToString());

    return returnValue;
    }


  • 相关阅读:
    JS仿淘宝网顶部的导航菜单
    JS+CSS打造高仿XP默认主题菜单样式
    Jquery打造网页右上角可伸缩关闭的菜单
    来自百度百科的目录显示/隐藏效果
    Jquery打造的下拉层式菜单
    javascript小數位四舍五入[IE5.5+]
    css外容器margin問題[IE中height:100%]
    EXEC执行动态SQL时取出变量值[EXEC函数只能是局部变量]
    sql一列变多列
    判斷日期,輸出成YYYY/MM/DD形式
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2274588.html
Copyright © 2011-2022 走看看