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;
                }
  • 相关阅读:
    laravel5.5事件广播系统
    laravel5.5队列
    mui框架 页面无法滚动解决方法
    js绑定事件和解绑事件
    自适应网页设计(Responsive Web Design)
    【总结】IE和Firefox的Javascript兼容性总结
    Javascript 多浏览器兼容性问题及解决方案
    js兼容性问题总结
    CSS3新增的选择器和属性
    CSS3新属性解释及用法
  • 原文地址:https://www.cnblogs.com/gwazy/p/200454.html
Copyright © 2011-2022 走看看