/// <summary>
        /// Ejecuta CommandText en Connection y devuelve un objeto DbDataReader.
        /// </summary>
        /// <param name="commandType">Especifica cómo se interpreta una cadena de comando.</param>
        /// <param name="commandText">Establece el comando de texto que se debe ejecutar en el origen de datos.</param>
        /// <param name="parameters">Establece los parametros que se va usar en la consulta.</param>
        public void ExecuteReader(CommandType commandType, string commandText, params object[] parameters)
        {
            UniversalConnectorDal.CleanParameters();
            UniversalConnectorDal.CreateParameters(parameters);

            UniversalConnectorDal.Open();
            UniversalConnectorDal.ExecuteReader(commandType, commandText);
        }
        /// <summary>
        /// Agrega o actualiza filas en DataTable.
        /// </summary>
        /// <param name="table">Clase DataTable que se va a rellenar con registros.</param>
        /// <param name="commandType">Tipo de comando</param>
        /// <param name="commandText">Consulta SQL a ejecutar</param>
        /// <param name="parameters">Establece los parametros que se va usar en la consulta.</param>
        public void FillDataTable(DataTable table, CommandType commandType, string commandText, params object[] parameters)
        {
            UniversalConnectorDal.CleanParameters();
            UniversalConnectorDal.CreateParameters(parameters);

            UniversalConnectorDal.Open();
            UniversalConnectorDal.FillDataTable(ref table, commandType, commandText);
        }
        /// <summary>
        /// Ejecuta una instrucción SQL en un objeto de conexión.
        /// </summary>
        /// <param name="commandType">Especifica cómo se interpreta una cadena de comando.</param>
        /// <param name="commandText">Establece el comando de texto que se debe ejecutar en el origen de datos.</param>
        /// <param name="parameters">Establece los parametros que se va usar en la consulta.</param>
        /// <returns>Número de filas afectadas.</returns>
        public int ExecuteNonQuery(CommandType commandType, string commandText, params object[] parameters)
        {
            UniversalConnectorDal.CleanParameters();
            UniversalConnectorDal.CreateParameters(parameters);

            UniversalConnectorDal.Open();
            return(UniversalConnectorDal.ExecuteNonQuery(commandType, commandText));
        }
        /// <summary>
        /// Ejecuta la consulta y devuelve un conjunto de resultados.
        /// </summary>
        /// <param name="commandType">Especifica cómo se interpreta una cadena de comando.</param>
        /// <param name="commandText">Establece el comando de texto que se debe ejecutar en el origen de datos.</param>
        /// <param name="parameters">Establece los parametros que se va usar en la consulta.</param>
        /// <returns>Un objeto DataTable.</returns>
        public DataTable ExecuteDataTable(CommandType commandType, string commandText, params object[] parameters)
        {
            UniversalConnectorDal.CleanParameters();
            UniversalConnectorDal.CreateParameters(parameters);

            UniversalConnectorDal.Open();
            return(UniversalConnectorDal.ExecuteDataTable(commandType, commandText));
        }
        /// <summary>
        /// Limpia los recursos manejados y no manejados.
        /// </summary>
        /// <param name="disposing">
        /// Si es true, el método es llamado directamente o indirectamente
        /// desde el código del usuario.
        /// Si es false, el método es llamado por el finalizador
        /// y sólo los recursos no manejados son finalizados.
        /// </param>
        protected virtual void Dispose(bool disposing)
        {
            // Preguntamos si Dispose ya fue llamado.
            if (!this.disposed)
            {
                if (disposing)
                {
                    // Llamamos al Dispose de todos los RECURSOS MANEJADOS.
                    UniversalConnectorDal.Dispose();
                }

                // Acá finalizamos correctamente los RECURSOS NO MANEJADOS
                // ...
            }
            this.disposed = true;
        }
        /// <summary>
        /// Agrega filas en un intervalo especificado de DataTable.
        /// NOTA: La consulta SQL se genera automaticamente.
        /// Si estable parametros deben conincidir con llaves primarias del objeto DataTable
        /// </summary>
        /// <param name="dataTable">Nombre de DataTable que se va a utilizar para la asignación de tabla. </param>
        /// <param name="parameters">Establece los parametros que se va usar en la consulta.</param>
        public void AutomaticFill(DataTable dataTable, params object[] parameters)
        {
            dataTable.Clear();
            UniversalConnectorDal.CleanParameters();

            string selectCmd = string.Empty;

            if (parameters.Length == 0)
            {
                selectCmd = SqlStatementsFactory.SelectCommand(dataTable);
            }

            else
            {
                selectCmd = SqlStatementsFactory.SelectCommand(dataTable, true);
                UniversalConnectorDal.CreateParameters(parameters);
            }

            UniversalConnectorDal.Open();
            UniversalConnectorDal.FillDataTable(ref dataTable, CommandType.Text, selectCmd);
        }
 /// <summary>
 /// Confirma la transacción de base de datos.
 /// </summary>
 public void Commit()
 {
     UniversalConnectorDal.CommitTransaction();
 }
 /// <summary>
 /// Inicia una transacción de base de datos.
 /// </summary>
 public void BeginTransaction()
 {
     UniversalConnectorDal.BeginTransaction();
 }
 /// <summary>
 /// Actualiza los valores de la base de datos ejecutando las instrucciones
 /// INSERT, UPDATE o DELETE respectivas para cada fila insertada,
 /// actualizada o eliminada en los objetos DataTable especificados.
 /// </summary>
 /// <param name="dataTable">Objeto DataTable que se utiliza para actualizar el origen de datos. </param>
 /// <returns>Número de filas del DataTable actualizadas correctamente.</returns>
 public int ExecuteBatch(DataTable dataTable)
 {
     UniversalConnectorDal.CleanParameters();
     UniversalConnectorDal.Open();
     return(UniversalConnectorDal.ExecuteBatch(dataTable, SqlStatementsFactory.SelectCommand(dataTable)));
 }
 /// <summary>
 /// Deshace una transacción desde un estado pendiente.
 /// </summary>
 public void RollBack()
 {
     UniversalConnectorDal.RollBack();
 }