public List <ClienteEntidade> ObterEndereco()
        {
            AbrirConexao();

            string query = "select cod_cliente, endereco, numero, bairro, cidade, uf, cep from DIM_CLIENTE where LATITUDE is null and ENDERECO is not null";

            cmd = new SqlCommand(query, con);
            dr  = cmd.ExecuteReader();

            var lista = new List <ClienteEntidade>();

            while (dr.Read())
            {
                var c = new ClienteEntidade();
                c.Cod_Cliente = (int)dr["COD_CLIENTE"];
                string endereco = dr["Endereco"].ToString();
                string numero   = dr["Numero"].ToString();
                string bairro   = dr["Bairro"].ToString();
                string cidade   = dr["Cidade"].ToString();
                string UF       = dr["UF"].ToString();
                string CEP      = dr["CEP"].ToString();

                c.EnderecoCompleto = $"{endereco}, {numero} - {bairro}, {cidade} - {UF}, {CEP}";

                lista.Add(c);
            }

            FecharConexao();
            return(lista);
        }
        public void ObterCoordenadas()
        {
            var rep = new Repositorio();
            List <ClienteEntidade> lista = rep.ObterEndereco();
            int contador = 0, acerto = 0, naoEncontrado = 0, erro = 0, total = lista.Count;

            foreach (var item in lista)
            {
                contador++;

                try
                {
                    var c = new ClienteEntidade();
                    c.Cod_Cliente = item.Cod_Cliente;

                    var requestUri = string.Format("https://maps.googleapis.com/maps/api/geocode/xml?address={0}&key=API", Uri.EscapeDataString(item.EnderecoCompleto));

                    var request  = WebRequest.Create(requestUri);
                    var response = request.GetResponse();
                    var xdoc     = XDocument.Load(response.GetResponseStream());

                    string status = xdoc.Element("GeocodeResponse").Element("status").Value;

                    if (status == "OK")
                    {
                        var result          = xdoc.Element("GeocodeResponse").Element("result");
                        var locationElement = result.Element("geometry").Element("location");
                        c.Latitude  = locationElement.Element("lat").Value;
                        c.Longitude = locationElement.Element("lng").Value;

                        rep.AtualizarTabela(c);
                        acerto++;
                    }
                    else
                    {
                        naoEncontrado++;
                    }

                    Console.WriteLine($"{contador} de {total} / Cod_Cliente: {c.Cod_Cliente} / Latitude: {c.Latitude} / Longitude: {c.Longitude}");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    erro++;
                    continue;
                }
            }

            Console.WriteLine("-----FIM-----");
            Console.WriteLine($"Acertos: {acerto} / Não Encontrado: {naoEncontrado} / Erros: {erro} / Total: {total}");
            Console.ReadKey();
        }
        public void AtualizarTabela(ClienteEntidade c)
        {
            AbrirConexao();

            string query = "update dim_cliente set Latitude = @Latitude, Longitude = @Longitude " +
                           "where Cod_Cliente = @Cod_Cliente";

            cmd = new SqlCommand(query, con);
            cmd.Parameters.AddWithValue("@Latitude", c.Latitude);
            cmd.Parameters.AddWithValue("@Longitude", c.Longitude);
            cmd.Parameters.AddWithValue("@Cod_Cliente", c.Cod_Cliente);
            cmd.ExecuteNonQuery();

            FecharConexao();
        }