Usuário com melhor resposta
Como Percorrer as linhas do resultado de uma Consulta ?

Pergunta
-
Estou Utilizando 3 Tabelas: Pais, Estado e Cidade
Tenho uma Consulta que exibirá todas as Cidades daquele País quando ele for selecionado em uma Combobox no Visual Studio ela me retorna todas as Cidades daquele determinado País .
Nome da Consulta a Seguir CidadePaisCount **Não tem nada de Count na consulta rsrs, apenas nome mesmo ^^
SELECT Cidade.NomeCidade FROM Cidade INNER JOIN Estado ON Cidade.IdEstado = Estado.IdEstado INNER JOIN Pais ON Estado.IdPais = Pais.IdPais WHERE (Estado.IdPais = @IdPais)
Necessito de percorrer as linhas do resultado dessa consulta, por exemplo se eu escolher Brasil ele me retornará todas as Cidades cadastradas do mesmo não importando o Estado, Digamos que me retornará 3 Cidades
Vamos chamar de Cidade 1, Cidade 2 e Cidade 3. Necessito de colocar essas 3 Cidades em uma variável.
Segue Código:
List<string> ListCidades = new List<string>(); private void nomePaisComboBox1_SelectionChangeCommitted(object sender, EventArgs e) { int IdPais = Convert.ToInt32(nomePaisComboBox1.SelectedValue);//Retornará o Id do Pais selecionado int QtdCidade = Convert.ToInt32(this.paisTableAdapter.CidadePais(gerenciamentoEventoTurismoDataSet.Pais,IdPais)); // A variável QtdCidade irá receber quantas Cidades esse pais tem cadastrado na base de dados for (int i = 0; i < QtdCidade; i++) { ListCidades.Add(this.paisTableAdapter.CidadePaisCount(IdPais)); //A ListCidades recebe as cidades } }
A variável ListCidade era para receber o nome Cidade 1, Cidade 2 e Cidade 3 Porem nas 3 vezes ela recebe Cidade 1.
Pelo que observei ela sempre retorna a mesma Cidade Porque a Cidade 1 Já vem selecionada como a primeira Cidade e o select da mesma não passa para a Cidade 2 ou 3 de acordo com o For, Já tentei adicionar pelo Index na posição "i" do laço porem não mudou nada.
ListCidades.Insert(i,this.paisTableAdapter.CidadePaisCount(IdPais));
Como posso fazer para percorrer as linhas do resultado dessa Consulta ?
Respostas
-
Boa tarde Lucas,
Você pode fazer da seguinte forma:
- Crie um objeto do tipo CIDADE e jogue o resultado nesse objeto;
- Depois, adicione esse objeto na LIST.
foreach (Cidade cid in RetornoSQL) { ListCidades.Add(cid); }
Abs.
Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx
- Sugerido como Resposta Ricardo Barbosa CortesModerator sexta-feira, 17 de outubro de 2014 19:20
- Marcado como Resposta Ricardo Barbosa CortesModerator sexta-feira, 17 de outubro de 2014 19:20
Todas as Respostas
-
-
Como estão os métodos / select seguintes: this.paisTableAdapter.CidadePais, this.paisTableAdapter.CidadePaisCount ?
Está do Mesmo Jeito que a CidadePaisCount porem sem o Count() ela me retorna a quantidade de cidade do pais de forma correta, agora se eu colocar o Count() ele me retorna o nome de todas as cidades :X -
-
Você não esta invertendo os métodos ? Pelo que percebo na nomenclatura deles, o método CidadePaisCount retorna a quantidade de cidades por pais, e CidadePais retorna uma cidades especifica, é isso mesmo ?
Sim os nomes eu inverti, porém meu Visual Studio deve estar com erro pois se eu tentar renomear as consultas, renomeia de boa porém eu perco referencia com o DataSet :x
mas a com o nome de CidadePaisCount retorna os nomes das Cidades e a CidadePais Retorna a quantidade de cidade que aquele pais tem.
-
Você não precisa pegar a quantidade de cidades para isso, apenas passe o país selecionado como parâmetro para sua query:
SELECT Cidade.NomeCidade FROM Cidade INNER JOIN Estado ON Cidade.IdEstado = Estado.IdEstado INNER JOIN Pais ON Estado.IdPais = Pais.IdPais WHERE (Estado.IdPais = @IdPais)
Depois percorra o resultado das linhas adicionando na list.
-
Você não precisa pegar a quantidade de cidades para isso, apenas passe o país selecionado como parâmetro para sua query:
SELECT Cidade.NomeCidade FROM Cidade INNER JOIN Estado ON Cidade.IdEstado = Estado.IdEstado INNER JOIN Pais ON Estado.IdPais = Pais.IdPais WHERE (Estado.IdPais = @IdPais)
Depois percorra o resultado das linhas adicionando na list.
Eu pego a Quantidade de Cidade para o For poder percorrer para cada cidade enquanto i for menor que QtdCidade que é a variável que recebe a quantidade de cidade.
Por isso adicionei o for para que pudesse percorrer cada linha do resultado da consulta, porem não percorre cada linha e essa é a justa parte em que não estou conseguindo fazer que é percorrer :X
-
-
Veja se consegue percorrer os dados da seguinte maneira:
foreach (DataRow dr in this.paisTableAdapter.CidadePaisCount(IdPais)) { ListaCidades.Add(dr.Item(1).ToString); }
me da dois erros do jeito que você me informou
1° diz que não foi possivel converter Char para System.Data.DataRow
2° Não me dá a opção "Item" apenas ItemArray
Tentei usar o ItemArray porem Continua o 1° erro informado
- Editado Lucas Lemuel quinta-feira, 16 de outubro de 2014 15:12 esqueci de informar que utilizei o ItemArray
-
Já tentei fazer dessa Forma:
foreach (String item in this.paisTableAdapter.CidadePaisCount(IdPais).ToString()) { ListCidades.Add(item); }
Nessa forma citada acima ele me informa que não é possível converter de Char para String!!
ai no lugar da String coloquei Char e não deu erro porem a cada interação com o laço ele adiciona uma letra do nome da cidade. (Tem lógica retornar apenas uma letra já que é char rsrs)
Exemplo Cidade 1.
Na 1° interação adiciona C
Na 2° Interação adiciona I...
-
-
Boa tarde Lucas,
Você pode fazer da seguinte forma:
- Crie um objeto do tipo CIDADE e jogue o resultado nesse objeto;
- Depois, adicione esse objeto na LIST.
foreach (Cidade cid in RetornoSQL) { ListCidades.Add(cid); }
Abs.
Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx
- Sugerido como Resposta Ricardo Barbosa CortesModerator sexta-feira, 17 de outubro de 2014 19:20
- Marcado como Resposta Ricardo Barbosa CortesModerator sexta-feira, 17 de outubro de 2014 19:20