public IResultado consultarCoordenadas(string idProvincia, string idCanton, string idDistrito)
        {
            SqlCommand cmd = new SqlCommand();

            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Connection  = conexionSQL;
            cmd.CommandText = "select latitud, longitud from distritos d where " +
                              "d.id_provincia = '" + idProvincia + "' and d.id_canton = '" + idCanton + "' and d.id_distrito = '" + idDistrito + "'";

            try
            {
                conexionSQL.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                reader.Read();      //Lee solo la primera línea

                ResultadoConsultaDinamica resultado = new ResultadoConsultaDinamica();
                resultado.Latitud  = Convert.ToDouble(reader[0].ToString());
                resultado.Longitud = Convert.ToDouble(reader[1].ToString());

                conexionSQL.Close();

                return(resultado);
            }
            catch (SqlException e)
            {
                return(null);
            }
        }
        public DTO consultarDinamica(object obj)
        {
            if (obj is DTO)
            {
                List <string> querys     = new List <string>();
                List <int>    cantidades = new List <int>();
                List <ResultadoConsultaDinamica> resultados = new List <ResultadoConsultaDinamica>();

                DTO entrada = (DTO)obj;
                DTO salida  = new DTO();

                //copia el DTO de la entrada
                DTO dtoGenerable = entrada.DeepCopy();

                //si tiene distritos, entonces se hace un query para cada uno de esos
                if (entrada.Distritos != null && entrada.Distritos.Count != 0)
                {
                    foreach (ResultadoTablas rt in entrada.Distritos)
                    {
                        dtoGenerable.Distritos = new List <ResultadoTablas>();
                        dtoGenerable.Distritos.Add(rt);

                        string consultaGenerada = generarConsulta(dtoGenerable);
                        querys.Add(consultaGenerada);
                        cantidades.Add(daoBD.consultarCantidad(consultaGenerada));
                    }

                    ResultadoTablas provincia = entrada.Provincias.ElementAt(0);
                    ResultadoTablas canton    = entrada.Cantones.ElementAt(0);
                    for (int i = 0; i < entrada.Distritos.Count; i++)
                    {
                        ResultadoTablas distrito = entrada.Distritos.ElementAt(i);

                        ResultadoConsultaDinamica result = (ResultadoConsultaDinamica)daoBD.consultarCoordenadas(provincia.Codigo.ToString(),
                                                                                                                 canton.Codigo.ToString(), distrito.Codigo.ToString());

                        result.Provincia = provincia.Nombre;
                        result.Canton    = canton.Nombre;
                        result.Distrito  = distrito.Nombre;
                        result.Cantidad  = cantidades.ElementAt(i);

                        resultados.Add(result);
                    }
                }
                //si tiene cantones, entonces se hace un query para cada uno de esos
                else if (entrada.Cantones != null && entrada.Cantones.Count != 0)
                {
                    foreach (ResultadoTablas rt in entrada.Cantones)
                    {
                        dtoGenerable.Cantones = new List <ResultadoTablas>();
                        dtoGenerable.Cantones.Add(rt);

                        string consultaGenerada = generarConsulta(dtoGenerable);
                        querys.Add(consultaGenerada);
                        cantidades.Add(daoBD.consultarCantidad(consultaGenerada));
                    }

                    ResultadoTablas provincia = entrada.Provincias.ElementAt(0);
                    for (int i = 0; i < entrada.Cantones.Count; i++)
                    {
                        ResultadoTablas canton = entrada.Cantones.ElementAt(i);

                        ResultadoConsultaDinamica result = (ResultadoConsultaDinamica)daoBD.consultarCoordenadas(provincia.Codigo.ToString(),
                                                                                                                 canton.Codigo.ToString(), "01");

                        result.Provincia = provincia.Nombre;
                        result.Canton    = canton.Nombre;
                        result.Distrito  = null;
                        result.Cantidad  = cantidades.ElementAt(i);

                        resultados.Add(result);
                    }
                }
                //si tiene provincias, entonces se hace un query para cada uno de esos
                else if (entrada.Provincias != null && entrada.Provincias.Count != 0)
                {
                    foreach (ResultadoTablas rt in entrada.Provincias)
                    {
                        dtoGenerable.Provincias = new List <ResultadoTablas>();
                        dtoGenerable.Provincias.Add(rt);

                        string consultaGenerada = generarConsulta(dtoGenerable);
                        querys.Add(consultaGenerada);
                        cantidades.Add(daoBD.consultarCantidad(consultaGenerada));
                    }

                    for (int i = 0; i < entrada.Provincias.Count; i++)
                    {
                        ResultadoTablas provincia = entrada.Provincias.ElementAt(i);

                        ResultadoConsultaDinamica result = (ResultadoConsultaDinamica)daoBD.consultarCoordenadas(provincia.Codigo.ToString(), "01", "01");

                        result.Provincia = provincia.Nombre;
                        result.Canton    = null;
                        result.Distrito  = null;
                        result.Cantidad  = cantidades.ElementAt(i);

                        resultados.Add(result);
                    }
                }
                //se hace a nivel general del país
                else
                {
                    dtoGenerable.Provincias = dtoGenerable.Cantones = dtoGenerable.Distritos = null;

                    string consultaGenerada = generarConsulta(dtoGenerable);
                    querys.Add(consultaGenerada);
                    int cantidad = daoBD.consultarCantidad(consultaGenerada);
                    cantidades.Add(cantidad);

                    ResultadoConsultaDinamica result = (ResultadoConsultaDinamica)daoBD.consultarCoordenadas("1", "01", "01");

                    result.Provincia = "País";
                    result.Canton    = null;
                    result.Distrito  = null;
                    result.Cantidad  = cantidad;

                    resultados.Add(result);
                }

                //return querys;
                //return cantidades;
                salida.Resultados = new ResultadosConsulta(resultados.Cast <IResultado>().ToList());
                return(salida);
            }

            return(null);
        }