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;
                }
  • 相关阅读:
    软件工程作业团队作业No.1
    软件工程作业No.5
    软件工程作业No.4
    软件工程作业No.3
    软件工程作业No.2
    java 读写yml文件,修改文件内容保持原格式
    oracle 相关
    git基础从创建仓库开始
    oracle安装过程问题记录
    Java 实现小工具读取文件有多少个单词
  • 原文地址:https://www.cnblogs.com/gwazy/p/200454.html
Copyright © 2011-2022 走看看