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中的四种内部类
    用输入/输出写一个程序,让用户输入一些姓名和电话号码
    分批读取大数据问题
    Linux产生序列数字
    两个有序链表的合并
    int和Integer的区别
    wait()和sleep()的区别
    Unix和Windows文件格式转化
    截取字符串的代码实现
    查看系统信息
  • 原文地址:https://www.cnblogs.com/gwazy/p/200454.html
Copyright © 2011-2022 走看看