none
A velha dúvida: DataReader x DataAdapter(DataSet) RRS feed

  • Pergunta

  • Bom gente, eu tenho que fazer uma apresentação amanhã sobre ADO.NET e estou desesperado.

    O que eu entendi até agora é que o DataReader é só 'Read-Only', porém, o que que eu vou querer setar? Não consigo entender, se eu utilizo os dois para manipular os dados que eu recuperei do banco. O DataAdapter precisa preencher no DataSet, ok, eu entendi que eu posso manipular as informações do jeito que eu quero quando eu as tenho no DataSet, mas eu não poderia jogar o meu DataReader em uma ListOf ou em um DataTable? Qual a vantagem então?

    Agradeço desde já!


    Grato,
    Lucas.
    segunda-feira, 11 de maio de 2009 19:10

Respostas

  • Lucas,

    o DataReader utiliza o modelo conectado. Isso significa que ele só pode ser utilizado enquanto houver uma conexão aberta com o Banco de Dados. Além disso, como você já notou, ele é foward-only (só avança na lista de registros) e read-only (somente leitura). É indicado quando você quer fazer consultas.

    Já o DataSet é a representação em memória de um banco de dados relacional. No DataSet, existem tabelas (DataTable), que possuem linhas (DataRow) e colunas (DataColumn), além dos relacionamentos. Ele utiliza o modelo desconectado. Isso significa que, uma vez montado o DataSet, ele trabalha de forma independente do banco de dados, ou seja, não é necessária uma conexão enquanto o DataSet e seus elementos estiverem sendo manipulados. Lógico que quando vc for persistir essas alterações, uma conexão terá que ser feita. Os dados que ficam nos DataTables do DataSet não precisam vir de um Banco de Dados, pode ser de qualquer fonte (arquivo XML, txt, planilha Excel, etc). O DataAdapter serve de "ponte" entre o DataSet e a fonte de dados.
    Ricardo Oneda Acesse o blog de Ricardo Oneda Acesse o perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Rushwish terça-feira, 12 de maio de 2009 18:12
    terça-feira, 12 de maio de 2009 17:10
  • A vantagem de usar o InsertCommand, UpdateCommand, etc, é que vc pode dar no DataAdapter um comando Insert, Update ou Delete, agilizando a codificação e diminuindo a chance de erros.

    Sobre navegar para frente e para trás: num DataSet vc tem uma coleção de DataTables e em cada DataTable a sua coleação de DataRows. Assim, vc pode fazer foreach's nessa estrutura e alterar a vontade, sem falar que você pode associar seu DataTable a um GridView ou DataGridView e deixar que o seu usuário altere os dados a vontade. Quando todas as alterações forem realizadas vc pode sincronizar o seu DataSet com o banco de dados.

    Com o DataReader pra fazer tudo que eu citei acima, dá muito mais trabalho, mas é possível fazer.
    • Marcado como Resposta Rushwish terça-feira, 12 de maio de 2009 18:12
    terça-feira, 12 de maio de 2009 17:57

Todas as Respostas

  • O DataAdapter te permite executar operações de update, insert e delete com as propriedades UpdateCommand etc. É muito mais voltado a ,por exemplo, colocar seus dados em um grid, altera-los e depois salvar no banco.

    Já com o DataReader vc só lê o dado e não tem a facilidade do DataAdapter pra alterar essa mesma tabela no BD. Se quiser, aí vai ter que escrever insert's e update's na mão e executá-los via ExecuteNonQuery.

    Era isso, abraços.
    segunda-feira, 11 de maio de 2009 20:48
  • Opa,


    Mas o que eu tenho dúvida é o seguinte. Eu li no site do Macoratti:

    "Quando usar um DataSet?

    1. Armazenar dados por um longo período;
    2. Transferir dados para outras classes;
    3. Fazer alterações e atualizações nos dados sem usar procedimentos armazenados(stored procedures) ou transações SQL(transact-SQL) ;
    4. Poder ler dados e navegar pelos dados sem restrições para frente e para trás entre as tabelas do banco de dados ;"

    - Como assim sem usar procedure ou transact? Qual a vantagem de eu usar o InsertCommand ou usar uma procedure de insert e executá-la na mão (pelo ExecuteNonQuery)?
    - Não entendi essa parte de navegar sem restrições, o DataReader eu entendo que ele só le pra frente as informações, mas no DataSet não entendi isso de conseguir navegar pra frente e para trás entre as tabelas do banco.

    Dúvida crucial.

    Agradeço desde ja!


    Grato,
    Lucas.



    terça-feira, 12 de maio de 2009 13:43
  • Lucas,

    o DataReader utiliza o modelo conectado. Isso significa que ele só pode ser utilizado enquanto houver uma conexão aberta com o Banco de Dados. Além disso, como você já notou, ele é foward-only (só avança na lista de registros) e read-only (somente leitura). É indicado quando você quer fazer consultas.

    Já o DataSet é a representação em memória de um banco de dados relacional. No DataSet, existem tabelas (DataTable), que possuem linhas (DataRow) e colunas (DataColumn), além dos relacionamentos. Ele utiliza o modelo desconectado. Isso significa que, uma vez montado o DataSet, ele trabalha de forma independente do banco de dados, ou seja, não é necessária uma conexão enquanto o DataSet e seus elementos estiverem sendo manipulados. Lógico que quando vc for persistir essas alterações, uma conexão terá que ser feita. Os dados que ficam nos DataTables do DataSet não precisam vir de um Banco de Dados, pode ser de qualquer fonte (arquivo XML, txt, planilha Excel, etc). O DataAdapter serve de "ponte" entre o DataSet e a fonte de dados.
    Ricardo Oneda Acesse o blog de Ricardo Oneda Acesse o perfil de Ricardo Oneda no Twitter
    • Marcado como Resposta Rushwish terça-feira, 12 de maio de 2009 18:12
    terça-feira, 12 de maio de 2009 17:10
  • A vantagem de usar o InsertCommand, UpdateCommand, etc, é que vc pode dar no DataAdapter um comando Insert, Update ou Delete, agilizando a codificação e diminuindo a chance de erros.

    Sobre navegar para frente e para trás: num DataSet vc tem uma coleção de DataTables e em cada DataTable a sua coleação de DataRows. Assim, vc pode fazer foreach's nessa estrutura e alterar a vontade, sem falar que você pode associar seu DataTable a um GridView ou DataGridView e deixar que o seu usuário altere os dados a vontade. Quando todas as alterações forem realizadas vc pode sincronizar o seu DataSet com o banco de dados.

    Com o DataReader pra fazer tudo que eu citei acima, dá muito mais trabalho, mas é possível fazer.
    • Marcado como Resposta Rushwish terça-feira, 12 de maio de 2009 18:12
    terça-feira, 12 de maio de 2009 17:57
  • Pedro e Ricardo, meus sinceros agradecimentos! Esclareceram as dúvidas que eu tinha!
    terça-feira, 12 de maio de 2009 18:13