/*
         * - RecuperarCandidatos tiene la misión de recuperar los datos de uno o varios candidatos
         */
        public List<Candidato> recuperarCandidatos(string TipoDoc = null, string NroDoc = null, string nombre = null, string apellido = null, int nroEmp = 0, int nroCand = 0)
        {
            bool conexionExitosa;
            GestorCandidatos gestorCandidatos = new GestorCandidatos();

            List<string> listaConsultas = new List<string>(); //Para componer la consultaSql
            List<Candidato> listaCandidatos = new List<Candidato>();//Para el retorno de datos

            string consultaSql;
            //Llamamos al metodo "iniciarConexion"
            conexionExitosa = iniciarConexion();

            //Evaluamos si la conexion se realizo con exito
            if (!conexionExitosa)
            {
                MessageBox.Show("No se pudo realizar la conexión con la Base de Datos");
                terminarConexion();
                return null;
            }

            //Creamos un adaptador llamado "comando" para realizar la consultaSql que definimos mas arriba
            MySql.Data.MySqlClient.MySqlCommand comando;
            comando = ObjConexion.CreateCommand();

            //Si todo es por defecto NULL se buscan y retornan TODOS los candidatos que haya en la Base de Datos
            if (TipoDoc == null && NroDoc == null && nombre == null && apellido == null && nroEmp == 0 && nroCand == 0)
            {
                consultaSql = "SELECT * FROM candidato";
                comando.CommandText = consultaSql;//En el adaptador comando le hacemos un asignacion en su atributo CommandText de la consultaSql

                //Se hace la ejecucion del comando con el metodo ExecuterReader
                //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos
                MySqlDataReader reader = comando.ExecuteReader();

                if (!reader.HasRows)
                {
                    //si el reader esta vacio, es que no se encontraron datos para la consulta realizada
                    MessageBox.Show("No se encontro ningún candidato en la Base de Datos");
                    terminarConexion();
                    return null;
                }

                //Si el reader contiene datos, se realiza la lectura de todos los ellos.
                while (reader.Read())
                {
                    string nom = reader["nombre"].ToString();
                    string ape = reader["apellido"].ToString();
                    string tipoDoc = reader["tipo documento"].ToString();
                    string nroDoc = reader["nro documento"].ToString();

                    int nroCandidato;
                    if (reader["nroCandidato"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                        nroCandidato = 0;
                    else
                        nroCandidato = Int32.Parse(reader["nroCandidato"].ToString());//Se lo transforma a un numero entero

                    int nroEmpleado;
                    if (reader["nroEmpleado"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                        nroEmpleado = 0;
                    else
                        nroEmpleado = Int32.Parse(reader["nroEmpleado"].ToString());//Se lo transforma a un numero entero

                    //Llamamos al gestor de candidatos para instanciar el candidato que se obtuvo de la base de datos
                    Candidato objCandidato = gestorCandidatos.instanciarCandidato(nom, ape, tipoDoc, nroDoc, nroCandidato, nroEmpleado);
                    //El retorno del metodo del gestor es introducido en la lista de candidatos
                    listaCandidatos.Add(objCandidato);
                }

            }//fin de if(TODO ES NULL), osea si no se pusieron parametros de busqueda

            //En caso de haber algún parametro diferente de NULL. Se compondra la consulta para la base de datos
            else
            {
                consultaSql = "SELECT * FROM `candidato` WHERE ";//Cabecera de la consulta sql

                //A continuacion se contemplan todas las posibilidades en fragmentos de consulta
                if (TipoDoc != null)
                    listaConsultas.Add("`tipo documento` LIKE '%" + TipoDoc + "%'");
                if (NroDoc != null)
                    listaConsultas.Add("`nro documento` LIKE '%" + NroDoc + "%'");
                if (nombre != null)
                    listaConsultas.Add("`nombre` LIKE '%" + nombre + "%'");
                if (apellido != null)
                    listaConsultas.Add("`apellido` LIKE '%" + apellido + "%'");
                if (nroEmp != 0)
                    listaConsultas.Add("`nroEmpleado` LIKE '%" + nroEmp + "%'");
                if (nroCand != 0)
                    listaConsultas.Add("`nroCandidato` LIKE '%" + nroCand + "%'");

                //Se agregan los fragmentos de consulta a la variable "consultaSql"
                for (int i = 0; i != (listaConsultas.Count - 1); i++)
                {
                    consultaSql += listaConsultas[i] + " AND ";
                }
                //Se concluye la declaracion de la consulta
                consultaSql += listaConsultas[(listaConsultas.Count - 1)] + ";";

                comando.CommandText = consultaSql;  //asignamos la consulta recien creada a el atributo CommandText (donde se guarda la consulta de un obj de tipo comando)

                //Se hace la ejecucion del comando con el metodo ExecuterReader
                //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos
                MySqlDataReader reader = comando.ExecuteReader();

                if (!reader.HasRows)
                {
                    //si el reader esta vacio, es qe no encontro a ese candidato
                    MessageBox.Show("No se encontro un candidato solicitado");
                    terminarConexion();
                    return null;
                }

                //Si el reader contiene datos, se realiza la lectura de todos los ellos.
                while (reader.Read())
                {
                    string nom = reader["nombre"].ToString();
                    string ape = reader["apellido"].ToString();
                    string tipoDoc = reader["tipo documento"].ToString();
                    string nroDoc = reader["nro documento"].ToString();

                    int nroCandidato;
                    if (reader["nroCandidato"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                        nroCandidato = 0;
                    else
                        nroCandidato = Int32.Parse(reader["nroCandidato"].ToString());//Se lo transforma a un numero entero

                    int nroEmpleado;
                    if (reader["nroEmpleado"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                        nroEmpleado = 0;
                    else
                        nroEmpleado = Int32.Parse(reader["nroEmpleado"].ToString());//Se lo transforma a un numero entero

                    //Llamamos al gestor de candidatos para instanciar el candidato que se obtuvo de la base de datos
                    Candidato objCandidato = gestorCandidatos.instanciarCandidato(nom, ape, tipoDoc, nroDoc, nroCandidato, nroEmpleado);
                    //El retorno del metodo del gestor es introducido en la lista de candidatos
                    listaCandidatos.Add(objCandidato);
                }
            }

            terminarConexion();
            return listaCandidatos;
        }
        /*
         * - RecuperarCandidato tiene la misión de recuperar los datos de un candidato puntual
         */
        public List<Candidato> recuperarCandidato(string TipoDoc, string NroDoc)
        {
            bool conexionExitosa;
            GestorCandidatos gestorCandidatos = new GestorCandidatos();
            List<Candidato> listaCandidatos = new List<Candidato>();//para el retorno de datos

            string consultaSql = "SELECT * FROM candidato WHERE  `nro documento` = '" + NroDoc + "' AND `tipo documento` = '"
                + TipoDoc + "';";

            //llamamos al metodo "iniciar conexion"
            conexionExitosa = iniciarConexion();

            //Evaluamos si la conexion se realizo con exito
            if (!conexionExitosa)
            {
                MessageBox.Show("Fallo la conexion con la base de datos");
                terminarConexion();
                return null;
            }

            //Creamos un adaptador llamado "comando" para realizar la consultaSql que definimos mas arriba
            MySql.Data.MySqlClient.MySqlCommand comando;
            comando = ObjConexion.CreateCommand();
            comando.CommandText = consultaSql;//En el adaptador comando hacemos un asignacion en su atributo CommandText de la consultaSql

            //Se hace la ejecucion del comando con el metodo ExecuterReader
            //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos
            MySqlDataReader reader = comando.ExecuteReader();

            if (!reader.HasRows)
            {
                //si el reader esta vacio, es que no se encontraron datos para la consulta realizada
                MessageBox.Show("El tipo y número de documento no corresponden a un candidato registrado");
                terminarConexion();
                return null;
            }

            //Si el reader contiene datos, se realiza la lectura de todos los ellos.
            while (reader.Read())
            {
                string nom = reader["nombre"].ToString();
                string ape = reader["apellido"].ToString();
                string tipoDoc = reader["tipo documento"].ToString();
                string nroDoc = reader["nro documento"].ToString();

                int nroCandidato;
                if (reader["nroCandidato"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                    nroCandidato = 0;
                else
                    nroCandidato = Int32.Parse(reader["nroCandidato"].ToString());//Se lo transforma a un numero entero

                int nroEmpleado;
                if (reader["nroEmpleado"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo
                    nroEmpleado = 0;
                else
                    nroEmpleado = Int32.Parse(reader["nroEmpleado"].ToString());//Se lo transforma a un numero entero

                //Llamamos al gestor de candidatos para instanciar el candidato que se obtuvo de la base de datos
                Candidato objCandidato = gestorCandidatos.instanciarCandidato(nom, ape, tipoDoc, nroDoc, nroCandidato, nroEmpleado);
                //El retorno del metodo del gestor es introducido en la lista de candidatos
                listaCandidatos.Add(objCandidato);
            }

            terminarConexion();
            return listaCandidatos;
        }