none
Coleção capturada de datatable RRS feed

  • Pergunta

  • Boa noite a todos,

    preciso preencher uma coleção com dados do banco de dados, e tentei fazer isto capturando dados do data table mais não

    deu certo ele repete a quantidade de linha com os mesmos dados .

    Fiz Assim

                                

     publi

    c static Li

    st<Entrada> BuscarEntradas()
            {

                AcessaDadosSqlServer adss = new AcessaDadosSqlServer();
                adss.LimparParametros();
                DataTable retorno = adss.ExecutarConsulta(CommandType.Text, "select * from entrada");
                EntradaColecao ec = new EntradaColecao();
                Entrada entrada = new Entrada();
                foreach (DataRow item in retorno.Rows)
                {
                    Entrada ent = new Entrada();
                    ent.DataEntrada = Convert.ToDateTime(retorno.Rows[0]["DataEntrada"]);
                    ent.DescricaoObjeto = Convert.ToString(retorno.Rows[0]["DescricaoObjeto"]);
                    ent.EntradaId = Convert.ToInt32(retorno.Rows[0]["EntradaId"]);
                    ent.HoraEntrada = Convert.ToDateTime(retorno.Rows[0]["HoraEntrada"]);
                    ent.NomeUsuario = Convert.ToString(retorno.Rows[0]["NomeRetirante"]);
                    ent.Receptor = Convert.ToString(retorno.Rows[0]["NomeUsuario"]);
                    ent.Terminal = Convert.ToString(retorno.Rows[0]["Terminal"]);

    ec.Add (ent);         

     }



                return ec;
            }

    Podem me Ajudar!!!

    sexta-feira, 6 de junho de 2014 00:52

Respostas

  • Bom dia...

    O problema do seu código é que você está fixando para trazer sempre a linha 0 do seu DataTable, e então sempre virão os mesmos dados:

     ent.DataEntrada = Convert.ToDateTime(retorno.Rows[0]["DataEntrada"]);

    Para corrigir, experimente usar um for e ir percorrendo linha a linha do DataTable:

    for (int i = 0; i < retorno.Rows.Count; i++)
                {
                    Entrada ent = new Entrada();
                    ent.DataEntrada = Convert.ToDateTime(retorno.Rows[i]["DataEntrada"]);
                    ent.DescricaoObjeto = Convert.ToString(retorno.Rows[i]["DescricaoObjeto"]);
                    ent.EntradaId = Convert.ToInt32(retorno.Rows[i]["EntradaId"]);
                    ent.HoraEntrada = Convert.ToDateTime(retorno.Rows[i]["HoraEntrada"]);
                    ent.NomeUsuario = Convert.ToString(retorno.Rows[i]["NomeRetirante"]);
                    ent.Receptor = Convert.ToString(retorno.Rows[i]["NomeUsuario"]);
                    ent.Terminal = Convert.ToString(retorno.Rows[i]["Terminal"]);
                    ec.Add(ent);
                }

    Espero ter ajudado!

    • Sugerido como Resposta Vinicius Nepomuceno Silva segunda-feira, 9 de junho de 2014 12:05
    • Marcado como Resposta D SOUZA segunda-feira, 9 de junho de 2014 14:58
    segunda-feira, 9 de junho de 2014 12:04

Todas as Respostas

  • Olá,

       creio que a melhor maneira seria utilizar um DataReader e um List<T> para buscar o resultado de sua consulta, e esquecer os "DataSets" pois estes são mais lentos e algumas outras coisas que equivalem a uma discussão geral.. 

        Mas esse seu codigo você adiciona sua classe a variavel "ec" que é uma classe também !! Tem conhecimento em DataReader para otimizar essa consulta ?

    sexta-feira, 6 de junho de 2014 02:26
  • Boa Tarde,

    Não possuo muito conhecimento, pode me ajudar com alguma coisa sobre??

    Obrigado

    sexta-feira, 6 de junho de 2014 19:16
  • Só para adicionar informações, este comando me traz o resultado da tabela

     DataTable retorno = adss.ExecutarConsulta(CommandType.Text, "select * from entrada");

    estou usando este para teste mais costumo usar com procedure

     DataTable retorno = adss.ExecutarConsulta(CommandType.StoredProcedure,"SPCONSULTAENTRADAGERAL");

     eu preciso pegar esta informações e criar uma coleção  da classe entrada;

    então criei uma nova instancia da classe entrada 

    Entrada ent = new Entrada();

    e uma instancia de uma classe que e uma list da classe entrada

    EntradaColecao ec = new EntradaColecao();

    e tentei dentro do foreach cria uma coleção, porem sei que para adicionar um novo elemento a uma coleção preciso de algo parecido com

    ec.Add(new EntradaColecao(ent));

    só que não consegui executar isto

    sexta-feira, 6 de junho de 2014 19:30
  • Bom dia...

    O problema do seu código é que você está fixando para trazer sempre a linha 0 do seu DataTable, e então sempre virão os mesmos dados:

     ent.DataEntrada = Convert.ToDateTime(retorno.Rows[0]["DataEntrada"]);

    Para corrigir, experimente usar um for e ir percorrendo linha a linha do DataTable:

    for (int i = 0; i < retorno.Rows.Count; i++)
                {
                    Entrada ent = new Entrada();
                    ent.DataEntrada = Convert.ToDateTime(retorno.Rows[i]["DataEntrada"]);
                    ent.DescricaoObjeto = Convert.ToString(retorno.Rows[i]["DescricaoObjeto"]);
                    ent.EntradaId = Convert.ToInt32(retorno.Rows[i]["EntradaId"]);
                    ent.HoraEntrada = Convert.ToDateTime(retorno.Rows[i]["HoraEntrada"]);
                    ent.NomeUsuario = Convert.ToString(retorno.Rows[i]["NomeRetirante"]);
                    ent.Receptor = Convert.ToString(retorno.Rows[i]["NomeUsuario"]);
                    ent.Terminal = Convert.ToString(retorno.Rows[i]["Terminal"]);
                    ec.Add(ent);
                }

    Espero ter ajudado!

    • Sugerido como Resposta Vinicius Nepomuceno Silva segunda-feira, 9 de junho de 2014 12:05
    • Marcado como Resposta D SOUZA segunda-feira, 9 de junho de 2014 14:58
    segunda-feira, 9 de junho de 2014 12:04
  • obrigado pela prontidão em ajudar .

    Vou fazer os testes

    segunda-feira, 9 de junho de 2014 14:46
  • Funcionou perfeitamente,

    Mais uma Vez Obrigado.

    segunda-feira, 9 de junho de 2014 14:58