• 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;
    }


  • 相关阅读:
    李洪强经典面试题43
    李洪强经典面试题42
    李洪强经典面试题41-iOS选择题
    HTTP头部解析
    iOS
    内网安全工具之hscan扫描
    跟着百度学PHP[4]OOP面对对象编程-17-多态
    绕过注入学习笔记
    引用/别名
    跟着百度学PHP[4]OOP面对对象编程-16-switch逻辑就语句
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2274588.html
Copyright © 2020-2023  润新知