none
Como Percorrer as linhas do resultado de uma Consulta ? RRS feed

  • Pergunta

  • Estou Utilizando 3 Tabelas: Pais, Estado e Cidade

    Relacionamento entre as Tabelas Pais, Estado e Cidade e seus atributosTenho 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 ?

    quinta-feira, 16 de outubro de 2014 13:36

Respostas

  • Boa tarde Lucas,

    Você pode fazer da seguinte forma:

    1. Crie um objeto do tipo CIDADE e jogue o resultado nesse objeto;
    2. 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

    quinta-feira, 16 de outubro de 2014 17:39

Todas as Respostas

  • Como estão os métodos / select seguintes: this.paisTableAdapter.CidadePais, this.paisTableAdapter.CidadePaisCount ?
    quinta-feira, 16 de outubro de 2014 13:43
  • 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
    quinta-feira, 16 de outubro de 2014 13:56
  • 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 ?
    quinta-feira, 16 de outubro de 2014 14:10
  • 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.

    quinta-feira, 16 de outubro de 2014 14:15
  • 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.

    quinta-feira, 16 de outubro de 2014 14:31
  • 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

    quinta-feira, 16 de outubro de 2014 14:37
  • Veja se consegue percorrer os dados da seguinte maneira:

    foreach (DataRow dr in this.paisTableAdapter.CidadePaisCount(IdPais)) {
    	ListaCidades.Add(dr.Item(1).ToString);
    }


    quinta-feira, 16 de outubro de 2014 14:50
  • 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
    quinta-feira, 16 de outubro de 2014 15:10
  • 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...

    quinta-feira, 16 de outubro de 2014 15:26
  • Então você tem que configurar seu método lá no data adapter, pois o retorno está incorreto, tenta mapear o select novamente
    quinta-feira, 16 de outubro de 2014 16:46
  • Boa tarde Lucas,

    Você pode fazer da seguinte forma:

    1. Crie um objeto do tipo CIDADE e jogue o resultado nesse objeto;
    2. 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

    quinta-feira, 16 de outubro de 2014 17:39