zoukankan      html  css  js  c++  java
  • 企业库中使用transaction(企业库中的列子)

    CREATE Procedure DebitAccount
    (
        
    @AccountID    int,
        
    @Amount    money
    )
    AS

    INSERT INTO 
        Debits (
    [AccountID],[Amount])
    VALUES
        (
    @AccountID,@Amount)


    GO


     
    CREATE Procedure CreditAccount
    (
        
    @AccountID    int,
        
    @Amount        money
    )
    AS

    INSERT INTO 
        Credits (
    [AccountID],[Amount])
    VALUES
        (
    @AccountID,@Amount)


    GO


      public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
            
    {
                
    bool result = false;
                
                
    // Create the Database object, using the default database service. The
                
    // default database service is determined through configuration.
                Database db = DatabaseFactory.CreateDatabase();

                
    // Two operations, one to credit an account, and one to debit another
                
    // account.
                string sqlCommand = "CreditAccount";
                DBCommandWrapper creditCommandWrapper 
    = db.GetStoredProcCommandWrapper(sqlCommand);

                creditCommandWrapper.AddInParameter(
    "@AccountID", DbType.Int32, sourceAccount);
                creditCommandWrapper.AddInParameter(
    "@Amount", DbType.Int32, transactionAmount);

                sqlCommand 
    = "DebitAccount";
                DBCommandWrapper debitCommandWrapper 
    = db.GetStoredProcCommandWrapper(sqlCommand);

                debitCommandWrapper.AddInParameter(
    "@AccountID", DbType.Int32, destinationAccount);
                debitCommandWrapper.AddInParameter(
    "@Amount", DbType.Int32, transactionAmount);

                
    using (IDbConnection connection = db.GetConnection())
                
    {
                    connection.Open();
                    IDbTransaction transaction 
    = connection.BeginTransaction();

                    
    try
                    
    {
                        
    // Credit the first account
                        db.ExecuteNonQuery(creditCommandWrapper, transaction);
                        
    // Debit the second account
                        db.ExecuteNonQuery(debitCommandWrapper, transaction);

                        
    // Commit the transaction
                        transaction.Commit();
                        
                        result 
    = true;
                    }

                    
    catch
                    
    {
                        
    // Rollback transaction 
                        transaction.Rollback();
                    }

                    connection.Close();
                    
                    
    return result;
                }
  • 相关阅读:
    我的Java学习推荐书目
    BTrace使用简介
    BTrace使用小结
    如何在生产环境使用Btrace进行调试
    BTrace : Java 线上问题排查神器
    淘宝Tprofiler工具实现分析
    JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
    性能工具TProfiler介绍文档
    分布式系统理论基础
    微信小程序
  • 原文地址:https://www.cnblogs.com/gwazy/p/200454.html
Copyright © 2011-2022 走看看