Datatable vs Dataset

129

Atualmente, uso um DataTable para obter resultados de um banco de dados que posso usar no meu código.

No entanto, muitos exemplos na Web são exibidos usando um DataSet e acessando as tabelas por meio do método de coleções.

Existe alguma vantagem, em termos de desempenho ou não, do uso de DataSets ou DataTables como um método de armazenamento para resultados SQL?

GateKiller
fonte
1
Se você estiver trabalhando com aplicativos da web, considere usar um DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Article / 19887/1954? Pf = true
Chris Burgess
Por fim, o DataTable e o DataSet foram transições úteis do ADO RecordSet ... em 2002. Você não deve usar a sua principal metáfora de dados atualmente.
Marc Gravell
@ MarcGravell O que você sugeriria como uma metáfora de dados primária hoje em dia?
m_a_s 31/07
@m_a_s t-classes explícitas, normalmente; talvez "registros" em c # vNext
Marc Gravell

Respostas:

94

Realmente depende do tipo de dados que você está trazendo de volta. Como um DataSet é (com efeito) apenas uma coleção de objetos DataTable, você pode retornar vários conjuntos distintos de dados em um único objeto e, portanto, mais gerenciável.

Em termos de desempenho, é mais provável que você obtenha ineficiência de consultas não otimizadas do que da escolha "errada" da construção do .NET. Pelo menos, essa tem sido a minha experiência.

ZombieSheep
fonte
29

Uma grande diferença é que os DataSets podem conter várias tabelas e você pode definir relacionamentos entre essas tabelas.

Se você está retornando apenas um único conjunto de resultados, acho que uma DataTable seria mais otimizada. Eu acho que deve haver alguma sobrecarga (concedida pequena) para oferecer a funcionalidade que um DataSet oferece e acompanhar várias DataTables.

Joshua Hudson
fonte
8

no 1.x, costumava haver coisas que o DataTables não podia fazer e que os DataSets podiam (não se lembra exatamente o que). Tudo isso foi alterado na 2.x. Meu palpite é que é por isso que muitos exemplos ainda usam DataSets. As DataTables devem ser mais rápidas, pois são mais leves. Se você está apenas obtendo um único conjunto de resultados, é sua melhor escolha entre os dois.

Karl Seguin
fonte
4
Um dos principais fatores foi que um DataTable não pôde ser serializado e não pôde ser retornado como resultado de um WebService.
Martin Clarke
6

Um recurso do DataSet é que, se você pode chamar várias instruções de seleção nos procedimentos armazenados, o DataSet terá um DataTable para cada um.

Shawn
fonte
Você também pode executar várias consultas de seleção SQL em um SQLCommand e acessar cada conjunto de resultados no conjunto de dados.Tables [i]
/
3

Existem algumas otimizações que você pode usar ao preencher uma DataTable, como chamar BeginLoadData (), inserir os dados e chamar EndLoadData (). Isso desativa algum comportamento interno no DataTable, como manutenção de índice, etc. Consulte este artigo para obter mais detalhes.

tbreffni
fonte
1

Quando você está lidando apenas com uma única tabela, a maior diferença prática que encontrei é que o DataSet possui um método "HasChanges", mas o DataTable não. No entanto, ambos possuem um "GetChanges", para que você possa usá-lo e testar se é nulo.

MickeyfAgain_BeforeExitOfSO
fonte
0

Um objeto DataTable representa dados tabulares como um cache tabular na memória, de linhas, colunas e restrições. O DataSet consiste em uma coleção de objetos DataTable que você pode se relacionar com objetos DataRelation.

Nischal Tyagi
fonte