none
Dataset - Preencher RRS feed

  • Pergunta

  • Tenho dois DataTables num dataset, sendo que o primeiro tem somente a estrutura e outro com uma estrutura diferente do primeiro tem dados, no entanto precisava preencher o primeiro datatable com os registros do segundo. Mas queria fazer isso de forma rápida, sem ficar lendo registro por registro, como se fosse uma consulta inclusão em SQL (Insert).

    Tem como fazer isso?

    terça-feira, 16 de junho de 2009 15:22

Respostas

  • Venildo,

    O importante é você conhecer várias formas de fazer, para ter alternativas quando for implementar :)

    Sua pergunta não é idiota, muito pelo contrário, esse é uma grande dúvida de muitos, eu mesmo tinha essa duvida e tive que procurar a resposta, o intuito de fóruns é isso mesmo é vc perguntar oque é.. para que serve e como usar.

    Respondendo:

    O dataset tipado é um dataset que é derivado de uma classe dataset que usa a informação contida em um arquivo de esquema xml, para gerar uma nova classe (entidade). Toda a informação do esquema e gerada e compilada nesta classe que é derivada de um dataset.

    Já os dataset não tipado não possui um schema associado, por isso eles não possui uma classe que os representam, ficando o usuário de informar os valores.

    Exemplo:

    Se vc não possuir este schema xml no banco provavelmente deve fazer a busca dos dados da seguinte forma: Cria uma conexão com o banco, cria o objeto dataset, faz a leitura no banco, preenche uma propriedade (utiliza o cast).

    Se tivesse um dataset tipado você faria: Abre a conexão já definida, e busca o dados (neste caso nao precisa usar o cast) pois o schema já identifica o tipo dos dados.


    Entendeu ? se ficou com duvida me avise..


    Mais:
    http://msdn.microsoft.com/pt-br/library/cc517968.aspx


    Abraço,


    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    quarta-feira, 24 de junho de 2009 02:00
  • Venildo,

    Segue ->

    Trabalhando com DataSet tipado em C# e VB .NET
    http://msdn.microsoft.com/pt-br/library/cc517968.aspx

    Como: Criar um dataset tipado
    http://msdn.microsoft.com/pt-br/library/04y282hb.aspx



    Esse material é muito bom e creio que dará bastante base, se ficar com duvida sobre algo pode perguntar, sem problemas, se souber responder, faço questão.  :)


    Abraço,



    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    domingo, 28 de junho de 2009 04:06

Todas as Respostas

  • Olá

    Se a estrutura dos 2 é diferente, não há como fazer em uma linha. Caso contrario voce poderia usar os metodos Copy ou Clone (agora nao me recordo qual deles copia estrutura E dados)

    DataTable dataTableDestino = dataTableOrigem.Copy();

    Mas como voce disse que ambos sao diferentes.......

    []s
    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    • Marcado como Resposta Venildo Amaral terça-feira, 16 de junho de 2009 18:59
    • Não Marcado como Resposta Venildo Amaral quarta-feira, 17 de junho de 2009 02:38
    terça-feira, 16 de junho de 2009 15:54
  • Robson, boa noite

    Estou testando algumas forma aqui para tentar resolver isso, você por acaso não tem nenhuma solução utilizando o DataView ou Linq (esse ultimo permite fazer select, mas nunca usei)

    O problema que se eu for ler registro por registro vou levar uma eternidade, pois dependendo da seleção do usuário as tabelas juntas poderão ter mais de 200.000 registros e ai a casa cai, rsrs

    Obrigado
    quarta-feira, 17 de junho de 2009 02:41
  • Olá cara

    Ainda estou estudando LINQ, portanto não sei se é possivel fazer uma consulta em um objeto DataTable (acredito que não).

    Seria mais ou menos isso:

    var consulta = from registro in dataTableOrigem select registro;

    Até aqui, só foram selecionados os registros do datatable e o resultado jogado em consulta. Porém como jogar esses dados para outro datatable de uma vez? Sinceramente não sei... (*)

    (*) se as estrututas dos datatables sao diferentes o que voce vai fazer com os campos que não batem? Ficar em branco? Voce pode passar qual a estrutura de ambos  (Nome Colunas e tipos) ?

    []s
    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quarta-feira, 17 de junho de 2009 03:05
  • Robson,

    O que que é fazer o seguinte, mesclar as duas tabelas, e gerar uma tabela com todos os campos das duas tabelas.

    Na primeira tabela tem as informações do Cliente, tipo, idCliente, Nome, Data de Nascimento e na segunda tabela, tem a sua movimentação, tipo idCliente, data compra, idproduto, idpedido,.

    Queria criar uma unica tabela com essas informações juntas, mesmo que os valores se repitam, por exemplo o cliente pode ter 10 pedidos, então irá repetir 10 vezes o nome dele, sem problema.

    Entendeu?
    quarta-feira, 17 de junho de 2009 13:06
  • A maneira mais rapida (em questao de performance) é criar uma view no seu banco de dados e carregar um dataset com essa view
    segunda-feira, 22 de junho de 2009 22:40
    Moderador
  • Venildo,


    Da uma olhada em como fazer uma junção de dados no Linq, talvez te atenda, eu fiz uns exemplos no meu blog, se ficar com duvida me avise. http://nelsonborgesjr.spaces.live.com/blog/cns!A1C7FFFCFB9D3EE5!285.entry


    Dica:

    Não há nada de errado em usar Dataset´s para isso, mas se puder evitar, faça-o, Dataset´s consomem muita memória e etc, pode buscar mais em vários sites que falam do assunto, como o Rui disse se tiver view no banco ajuda tb na performance.. lembrando que isso é uma dica, cada projeto tem sua particularidades..


    Abraço,


    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    terça-feira, 23 de junho de 2009 01:01
  • Nelson,

    Vou dar uma olhada no seu blog, no entanto o que me chamou a atenção foi o comentário sobre o DataSet utilizo ele praticamente para todos os acessos a banco de dados, neste último projeto que estou utilizando o dataview, proveniente de um dataset.
    Você teria algum site a qual poderia pesquisar sobre esse assunto de consumo de memória, pois estou utilizando o thread tb e de vez enquando dá uns erros cabuloso que não consigo simular e de repente desaparece tb.
    Sempre crio os meus datasets dentro da propria rotina é muito dificil declarar um dataset como publica para a classe, mas no entanto eu nunca destruou o objeto no final do processo seria bom colocar um dataset=nothing??

    Valeu
    terça-feira, 23 de junho de 2009 10:02
  • Venildo,

    Bom neste caso, vc poderá ter esses tipos de problemas, de maquina lenta, estouro de memória e etc... uma boa pratica para destruir objetos, para isso vc pode usar o using http://www.linhadecodigo.com.br/Dica.aspx?id=1299, agora para ver a questao do dataset.. dê uma olhada:

    http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/62d4ae2e-8772-4541-9e76-261dcd7a053e

    http://www.macoratti.net/adon_dsr.htm

    http://www.plugmasters.com.br/sys/materias/294/1/DataSet-x-DataReader



    Lembre-se:
    Que o Dataset é uma representação do seu banco de dados (table, rows, schema e etc), as vezes vc pode usar estrutura menores, exemplo se quero apenas ler um dado do banco uso o DataReader(efetua apenas leitura em um local especifico) em vez de chamar toda a estrutura do banco (Dataset) para depois ler o dado, e por ai vai..


    Abraço,


    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    terça-feira, 23 de junho de 2009 12:57
  • Nelson, boa noite

    Legal, gostei dos artigos e dicas, são muito bons mesmos.

    Mas cheguei a conclusão que usar  um dataview é bem rápido mesmo, pois ele permite fazer indexação e pesquisar a chave, isso me ajudou e muito, pois antes estava fazendo uma pesquisa direta no banco de dados utilizando string sql, isso demandava um tempo exorbitante.

    Me tira uma dúvida, apesar que não é mais o foco desta thread, no arquivo do Marcoretti, ele comenta a possibilidade de criar campos calculados dentro de um dataset, se eu entendi quando o usuário alterar a informação de uma coluna, automaticamente vai alterar esse campo calculado, é isso mesmo? Existe essa possbilidade?

    Agora vai uma pergunta de ferrar, muito besta, mas carrego ela comigo já faz um tempo, quando carrego uma dataset através do método fill do objeto adapter, esse dataset é tipado? E qual a diferente entre um DataSet e um DataSet Tipado? (caso a pergunta seja idiota, me desculpe).

    Obrigado
    terça-feira, 23 de junho de 2009 22:40
  • Venildo,

    O importante é você conhecer várias formas de fazer, para ter alternativas quando for implementar :)

    Sua pergunta não é idiota, muito pelo contrário, esse é uma grande dúvida de muitos, eu mesmo tinha essa duvida e tive que procurar a resposta, o intuito de fóruns é isso mesmo é vc perguntar oque é.. para que serve e como usar.

    Respondendo:

    O dataset tipado é um dataset que é derivado de uma classe dataset que usa a informação contida em um arquivo de esquema xml, para gerar uma nova classe (entidade). Toda a informação do esquema e gerada e compilada nesta classe que é derivada de um dataset.

    Já os dataset não tipado não possui um schema associado, por isso eles não possui uma classe que os representam, ficando o usuário de informar os valores.

    Exemplo:

    Se vc não possuir este schema xml no banco provavelmente deve fazer a busca dos dados da seguinte forma: Cria uma conexão com o banco, cria o objeto dataset, faz a leitura no banco, preenche uma propriedade (utiliza o cast).

    Se tivesse um dataset tipado você faria: Abre a conexão já definida, e busca o dados (neste caso nao precisa usar o cast) pois o schema já identifica o tipo dos dados.


    Entendeu ? se ficou com duvida me avise..


    Mais:
    http://msdn.microsoft.com/pt-br/library/cc517968.aspx


    Abraço,


    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    quarta-feira, 24 de junho de 2009 02:00
  • Grande Nelson, Sanou a minha dúvida, faz um tempo que utilizo datasets e tinha essa dúvida. Uma vez vi uma apresentação, mas não tenho certeza aonde colocava o nome do dataset e colocava o ponto, aparecia o nome do campo, como se fosse um método do dataset, você tem algum material sobre isso? Já pesquisei na net, mas não achei nada. Mas uma vez obrigado. ps: Se estiver abusando pode avisar, que paro de perguntar.
    quarta-feira, 24 de junho de 2009 13:01
  • Venildo,

    Segue ->

    Trabalhando com DataSet tipado em C# e VB .NET
    http://msdn.microsoft.com/pt-br/library/cc517968.aspx

    Como: Criar um dataset tipado
    http://msdn.microsoft.com/pt-br/library/04y282hb.aspx



    Esse material é muito bom e creio que dará bastante base, se ficar com duvida sobre algo pode perguntar, sem problemas, se souber responder, faço questão.  :)


    Abraço,



    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    domingo, 28 de junho de 2009 04:06