//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;
        }