Datatable vs Dataset

129

Derzeit verwende ich eine DataTable, um Ergebnisse aus einer Datenbank abzurufen, die ich in meinem Code verwenden kann.

Viele Beispiele im Web zeigen jedoch, dass stattdessen ein DataSet verwendet wird und über die Sammlungsmethode auf die Tabelle (n) zugegriffen wird.

Gibt es einen leistungsbezogenen oder sonstigen Vorteil der Verwendung von DataSets oder DataTables als Speichermethode für SQL-Ergebnisse?

GateKiller
quelle
Letztendlich waren DataTable und DataSet nützliche Übergänge von ADO RecordSet ... im Jahr 2002. Sie sollten sie heutzutage nicht als primäre Datenmetapher backen.
Marc Gravell

Antworten:

94

Es hängt wirklich von der Art der Daten ab, die Sie zurückbringen. Da ein DataSet (praktisch) nur eine Sammlung von DataTable-Objekten ist, können Sie mehrere unterschiedliche Datensätze in einem einzigen und daher besser verwaltbaren Objekt zurückgeben.

In Bezug auf die Leistung ist es wahrscheinlicher, dass nicht optimierte Abfragen Ineffizienz verursachen als die "falsche" Auswahl des .NET-Konstrukts. Zumindest war das meine Erfahrung.

ZombieSheep
quelle
29

Ein wesentlicher Unterschied besteht darin, dass DataSets mehrere Tabellen enthalten können und Sie Beziehungen zwischen diesen Tabellen definieren können.

Wenn Sie nur eine einzige Ergebnismenge zurückgeben, wäre eine DataTable meiner Meinung nach optimierter. Ich würde denken, dass es einen gewissen Overhead geben muss (der klein ist), um die Funktionalität eines DataSet zu bieten und mehrere DataTables zu verfolgen.

Joshua Hudson
quelle
8

In 1.x gab es Dinge, die DataTables nicht konnte, was DataSets konnte (ich erinnere mich nicht genau, was). All das wurde in 2.x geändert. Ich vermute, deshalb verwenden viele Beispiele immer noch DataSets. DataTables sollten schneller sein, da sie leichter sind. Wenn Sie nur eine einzelne Ergebnismenge ziehen, ist dies die beste Wahl zwischen beiden.

Karl Seguin
quelle
4
AFAIK eine große Sache war, dass eine DataTable nicht serialisiert und nicht als Ergebnis eines WebService zurückgegeben werden konnte.
Martin Clarke
6

Eine Funktion des DataSet besteht darin, dass das DataSet jeweils eine DataTable enthält, wenn Sie in Ihren gespeicherten Prozeduren mehrere select-Anweisungen aufrufen können.

Shawn
quelle
Sie können auch mehrere SQL-Auswahlabfragen in einem SQLCommand ausführen und auf jede Ergebnismenge im Dataset zugreifen. Tabellen [i]
Januar
3

Es gibt einige Optimierungen, die Sie beim Ausfüllen einer Datentabelle verwenden können, z. B. das Aufrufen von BeginLoadData (), das Einfügen der Daten und das Aufrufen von EndLoadData (). Dadurch wird ein internes Verhalten in der DataTable deaktiviert, z. B. die Indexpflege usw. Weitere Informationen finden Sie in diesem Artikel .

tbreffni
quelle
1

Wenn Sie sowieso nur mit einer einzelnen Tabelle arbeiten, besteht der größte praktische Unterschied darin, dass DataSet eine "HasChanges" -Methode hat, DataTable jedoch nicht. Beide haben jedoch einen "GetChanges", sodass Sie diesen verwenden und auf null testen können.

MickeyfAgain_BeforeExitOfSO
quelle
0

Ein DataTable-Objekt repräsentiert Tabellendaten als speicherinternen, tabellarischen Cache aus Zeilen, Spalten und Einschränkungen. Das DataSet besteht aus einer Sammlung von DataTable-Objekten, die Sie mit DataRelation-Objekten miteinander verknüpfen können.

Nischal Tyagi
quelle