//Métodos Privados para DBProvider.Instance /// <summary> /// Método privado para execução de uma query usando uma transação. /// </summary> /// <param name="_inQuery">Query de Entrada.</param> /// <param name="_recordsAffected">Int32 indicando a quantidade de linhas afetadas (INSERT, UPDATE ou DELETE).</param> /// <param name="_transManager">Objeto DBTransactionManager da transação.</param> private static void QueryTransactionExecute(string _inQuery, out int _recordsAffected, DBTransactionManager _transManager) { //Associa a transação ao comando _transManager.Command.Transaction = _transManager.Transaction; _transManager.Command.CommandText = _inQuery; _transManager.Command.CommandType = CommandType.Text; _transManager.Command.Connection = _transManager.DbConnection; //Executa o comando _recordsAffected = _transManager.Command.ExecuteNonQuery(); }
/// <summary> /// Método privado para execução de uma query usando uma transação. /// </summary> /// <param name="_inQuery">Query de Entrada.</param> /// <param name="_recordsAffected">Int32 indicando a quantidade de linhas afetadas (INSERT, UPDATE ou DELETE).</param> /// <param name="_transManager">Objeto DBTransactionManager da transação.</param> /// <param name="_params">Vetor de DbParameter com os parâmetros.</param> private static void QueryTransactionExecute(string _inQuery, out int _recordsAffected, DBTransactionManager _transManager, params DbParameter[] _params) { DbParameter parameter = null; //Associa a transação ao comando _transManager.Command.Transaction = _transManager.Transaction; _transManager.Command.CommandText = _inQuery; _transManager.Command.CommandType = CommandType.Text; _transManager.Command.Connection = _transManager.DbConnection; _transManager.Command.Parameters.Clear(); //Adiciona os parâmetros de execução ao comando da transação parameter = _transManager.Factory.CreateParameter(); for (int i = 0; i < _params.Length; i++) { parameter = _params[i]; _transManager.Command.Parameters.Add(parameter); } //Executa o comando _recordsAffected = _transManager.Command.ExecuteNonQuery(); }
/// <summary> /// Método privado para execução de uma procedure usando uma transação. /// </summary> /// <param name="_inProcedure">Procedure de Entrada.</param> /// <param name="_result">System.Object com o resultado da consulta.</param> /// <param name="_transManager">>Objeto DBTransactionManager da transação.</param> /// <param name="_params">Vetor de DbParameter com os parâmetros.</param> private static void ProcedureTransactionExecuteEscalar(string _inProcedure, out object _result, DBTransactionManager _transManager, params DbParameter[] _params) { DbParameter parameter = null; //Associa a transação ao comando _transManager.Command.Transaction = _transManager.Transaction; _transManager.Command.CommandText = _inProcedure; _transManager.Command.CommandType = CommandType.StoredProcedure; _transManager.Command.Connection = _transManager.DbConnection; _transManager.Command.Parameters.Clear(); //Adiciona os parâmetros de execução ao comando da transação parameter = _transManager.Factory.CreateParameter(); for (int i = 0; i < _params.Length; i++) { parameter = _params[i]; _transManager.Command.Parameters.Add(parameter); } //Executa o comando _result = _transManager.Command.ExecuteScalar(); }
//Métodos Privados para DBProvider.Instance /// <summary> /// Método privado para execução de uma procedure usando uma transação. /// </summary> /// <param name="_inProcedure">Procedure de Entrada.</param> /// <param name="_result">System.Object com o resultado da consulta.</param> /// <param name="_transManager">>Objeto DBTransactionManager da transação.</param> private static void ProcedureTransactionExecuteEscalar(string _inProcedure, out object _result, DBTransactionManager _transManager) { //Associa a transação ao comando _transManager.Command.Transaction = _transManager.Transaction; _transManager.Command.CommandText = _inProcedure; _transManager.Command.CommandType = CommandType.StoredProcedure; _transManager.Command.Connection = _transManager.DbConnection; //Executa o comando _result = _transManager.Command.ExecuteScalar(); }
/// <summary> /// /// </summary> /// <param name="_inProcedure"></param> /// <param name="_errorMessage"></param> /// <param name="_transManager"></param> /// <param name="_transState"></param> /// <param name="_params"></param> /// <returns></returns> public static Hashtable InstanceProcedureOutData(string _inProcedure, out string _errorMessage, ref DBTransactionManager _transManager, DBTransactionManager.TransactionState _transState, params DbParameter[] _params) { DBInstance dbInstance = new DBInstance(); Hashtable ht = new Hashtable(); int recordsAffected = 0; _errorMessage = String.Empty; if (_inProcedure.Length == 0) { _errorMessage = "Nenhum comando SQL foi informado."; return null; } try { //Executa uma transação isolada if (_transState == DBTransactionManager.TransactionState.StandAlone) { //Abre a conexão if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); //Inicia a transação _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); ProcedureTransactionExecute(_inProcedure, out recordsAffected, _transManager, _params); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } else { //Bloqueio de execução depois da detecção de um erro if (!_transManager.TransHold) { //Inicia a transação.DBTransactionManager(true) if (_transState == DBTransactionManager.TransactionState.Begin) { //Abre a conexão e inicia a transação if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); ProcedureTransactionExecute(_inProcedure, out recordsAffected, _transManager, _params); } //Permite a execução de + de três comandos em uma transação else if (_transState == DBTransactionManager.TransactionState.ContinueExecution) { ProcedureTransactionExecute(_inProcedure, out recordsAffected, _transManager, _params); } //Finaliza a transação.DBTransactionManager(false) else if (_transState == DBTransactionManager.TransactionState.End) { ProcedureTransactionExecute(_inProcedure, out recordsAffected, _transManager, _params); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } } } } catch (DbException exp) { _errorMessage = "Uma exceção de banco ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; if (_transManager.Command.Transaction != null) _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } catch (Exception exp) { _errorMessage = "Uma exceção ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; if (_transManager.Command.Transaction != null) _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } //Recupera os valores de saída e insere numa HashTable for (int i = 0; i < _params.Length; i++) { ht.Add(_params[i].ParameterName, _params[i].Value); } return ht; }
/// <summary> /// Executa uma query sem parâmetros, retornando um Int32, utilizando a conexão do banco e transações. /// </summary> /// <param name="_inQuery">Query de Entrada.</param> /// <param name="_errorMessage">Mensagem de Erro.</param> /// <param name="_transManager">Objeto DBTransactionManager da transação.</param> /// <param name="_transState">Estado de execução do bloco da transação. (Begin, End, ContinueExecution, StandAlone)</param> /// <param name="_params">Vetor de DbParameter com os parâmetros.</param> /// <returns>Int32 indicando a quantidade de linhas afetadas (INSERT, UPDATE ou DELETE).</returns> public static int Instance(string _inQuery, out string _errorMessage, ref DBTransactionManager _transManager, DBTransactionManager.TransactionState _transState, params DbParameter[] _params) { _errorMessage = String.Empty; int recordsAffected = 0; if (_inQuery.Length == 0) { _errorMessage = "Nenhum comando SQL foi informado."; return recordsAffected = -1; } try { //Inicia uma transação isolada if (_transState == DBTransactionManager.TransactionState.StandAlone) { //Abre a conexão e inicia a transação if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); QueryTransactionExecute(_inQuery, out recordsAffected, _transManager, _params); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } else { //Bloqueio de execução depois da detecção de um erro if (!_transManager.TransHold) { //Inicia a transação.DBTransactionManager(true) if (_transState == DBTransactionManager.TransactionState.Begin) { //Abre a conexão e inicia a transação if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); QueryTransactionExecute(_inQuery, out recordsAffected, _transManager, _params); } //Permite a execução de + de três comandos em uma transação else if (_transState == DBTransactionManager.TransactionState.ContinueExecution) { QueryTransactionExecute(_inQuery, out recordsAffected, _transManager, _params); } //Finaliza a transação.DBTransactionManager(false) else { QueryTransactionExecute(_inQuery, out recordsAffected, _transManager, _params); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } } } } catch (DbException exp) { _errorMessage = "Uma exceção de banco ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; if (_transManager.Command.Transaction != null) _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } catch (Exception exp) { _errorMessage = "Uma exceção ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; if (_transManager.Command.Transaction != null) _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } return recordsAffected; }
//Procedure Instance ExecuteEscalar Transaction - Execução Idependente de Comandos de uma Transação (blocos isolados) /// <summary> /// Executa uma procedure sem parâmetros, retornando um System.Object, utilizando a conexão do banco e transações. /// </summary> /// <param name="_inProcedure">Procedure de Entrada.</param> /// <param name="_errorMessage">Mensagem de Erro.</param> /// <param name="_transManager">Objeto DBTransactionManager da transação.</param> /// <param name="_transState">Estado de execução do bloco da transação. (Begin, End, ContinueExecution, StandAlone)</param> /// <returns>System.Object</returns> public static object InstanceProcedureExecuteScalar(string _inProcedure, out string _errorMessage, ref DBTransactionManager _transManager, DBTransactionManager.TransactionState _transState) { DBInstance dbInstance = new DBInstance(); _errorMessage = String.Empty; object result = null; if (_inProcedure.Length == 0) { _errorMessage = "Nenhum comando SQL foi informado."; return null; } try { //Inicia uma transação isolada if (_transState == DBTransactionManager.TransactionState.StandAlone) { //Abre a conexão e inicia a transação if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); ProcedureTransactionExecuteEscalar(_inProcedure, out result, _transManager); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } //Bloqueio de execução depois da detecção de um erro if (!_transManager.TransHold) { //Inicia a transação.DBTransactionManager(true) if (_transState == DBTransactionManager.TransactionState.Begin) { //Abre a conexão e inicia a transação if (_transManager.DbConnection.State == ConnectionState.Closed) _transManager.DbConnection.Open(); _transManager.Transaction = _transManager.DbConnection.BeginTransaction(); ProcedureTransactionExecuteEscalar(_inProcedure, out result, _transManager); } //Permite a execução de + de três comandos em uma transação else if (_transState == DBTransactionManager.TransactionState.ContinueExecution) { ProcedureTransactionExecuteEscalar(_inProcedure, out result, _transManager); } //Finaliza a transação.DBTransactionManager(false) else { ProcedureTransactionExecuteEscalar(_inProcedure, out result, _transManager); //Comita a transação _transManager.Command.Transaction.Commit(); //Fecha a conexão da transação _transManager.EndTransaction(); } } } catch (DbException exp) { _errorMessage = "Uma exceção de banco ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } catch (Exception exp) { _errorMessage = "Uma exceção ocorreu durante a execução dos comandos. Nenhuma das operações foi executada. <BR>"; _errorMessage = _errorMessage + exp.Message; _transManager.Command.Transaction.Rollback(); //Bloqueia a execução de qualquer chamada posterior dentro da transação em execução _transManager.TransHold = true; //Fecha a conexão da transação _transManager.EndTransaction(); } return result; }