/// <summary>
        /// 지정된 함수를 Transaction하에서 실행한다.
        /// 일반적인 DB 처리 로직을 Transaction 환경하에서 실행될 수 있도록 한다.
        /// </summary>
        /// <param name="connectionStringName">Database connection string name</param>
        /// <param name="isolationLevel">격리 수준</param>
        /// <param name="actionToExecute">실행할 Action</param>
        public static void Transaction(string connectionStringName, IsolationLevel isolationLevel, Action <IDbCommand> actionToExecute)
        {
            connectionStringName.ShouldNotBeWhiteSpace("connectionStringName");
            actionToExecute.ShouldNotBeNull("actionToExecute");

            if (IsDebugEnabled)
            {
                log.Debug("Execute the specified action under transaction with dbName=[{0}], isolationLevel=[{1}]", connectionStringName,
                          isolationLevel);
            }

            StartTransaction(connectionStringName, isolationLevel);

            try {
                using (var cmd = ActiveConnection.CreateCommand()) {
                    cmd.Transaction = ActiveTransaction;
                    actionToExecute(cmd);
                }

                CommitTransaction();
            }
            catch (Exception ex) {
                if (log.IsErrorEnabled)
                {
                    log.Error("Transaction 하에서 actionToExecute를 실행하는데 실패했습니다.");
                    log.Error(ex);
                }

                RolebackTransaction();
                throw;
            }
            finally {
                DisposeTransaction();
            }
        }
        /// <summary>
        ///  Send to DB query to compute.
        /// </summary>
        /// <param name="expression">The query to compute</param>
        /// <returns>The value computed</returns>
        protected object ComputeValue(string expression)
        {
            object result;

            using (DbCommand cmd = ActiveConnection.CreateCommand())
            {
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = @"Select " + expression;
                cmd.Transaction = TransactionManager.GetTransaction(ActiveConnection);
                result          = cmd.ExecuteScalar();
            }
            return(result);
        }
 /// <summary>
 /// Returns a copy of the current ActiveCommand of this RecordsetHelper.
 /// </summary>
 /// <returns>A copy of the current ActiveCommand.</returns>
 public DbCommand CopySourceCommand()
 {
     if (_opened)
     {
         DbCommand result = ActiveConnection.CreateCommand();
         result.CommandText = _activeCommand.CommandText;
         result.CommandType = _activeCommand.CommandType;
         DbParameter[] paramArray = new DbParameter[_activeCommand.Parameters.Count];
         _activeCommand.Parameters.CopyTo(paramArray, 0);
         result.Parameters.AddRange(paramArray);
         return(result);
     }
     throw new InvalidOperationException("The recordSet has to be opened to perform this operation");
 }
Example #4
0
 public static void Transaction(IsolationLevel isolation, Proc exec)
 {
     StartTransaction(isolation);
     try
     {
         using (SqlCommand command = ActiveConnection.CreateCommand())
         {
             command.Transaction = ActiveTransaction;
             exec(command);
         }
         CommitTransaction();
     }
     catch
     {
         RollbackTransaction();
         throw;
     }
     finally
     {
         DisposeTransaction();
     }
 }
Example #5
0
 /// <summary>
 /// Execute the specified delegate inside a transaction with the specific
 /// isolation level
 /// </summary>
 /// <param name="connectionStringName">Name of the connection string.</param>
 /// <param name="isolationLevel">The isolation level.</param>
 /// <param name="actionToExecute">The action to execute.</param>
 public static void Transaction(string connectionStringName, IsolationLevel isolationLevel, Proc actionToExecute)
 {
     StartTransaction(connectionStringName, isolationLevel);
     try
     {
         using (IDbCommand command = ActiveConnection.CreateCommand())
         {
             command.Transaction = ActiveTransaction;
             actionToExecute(command);
         }
         CommitTransaction();
     }
     catch
     {
         RollbackTransaction();
         throw;
     }
     finally
     {
         DisposeTransaction();
     }
 }