c# - Datatable vs Dataset

Translate

Ich verwende derzeit 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?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

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.

Quelle
Translate

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 anzubieten und mehrere DataTables zu verfolgen.

Quelle
Translate

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.

Quelle
Translate

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.

Quelle
Translate

Es gibt einige Optimierungen, die Sie beim Füllen einer DataTable 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. SieheDieser Artikelfür weitere Details.

Quelle
Translate

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.

Quelle
Translate

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.

Quelle