/// <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"); }
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(); } }
/// <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(); } }