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


  • 相关阅读:
    股票交易接口
    股票自动买卖
    安信证券接口的demo做得不好。
    MEF bug? 无法加载外部的DLL
    如何移植行情软件的指标到千发股票自动交易软件?
    股票策略交易
    博客园自动关注病毒 只活了一小会儿。
    Float 运算的怪异性
    文件大小和占用空间为何不一样
    做最好的自己
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2274588.html
Copyright © 2011-2022 走看看