Was ist der Zweck von Datasets?

7

Ich möchte den Zweck von Datensätzen verstehen, wenn wir mit einfachen SQL-Anweisungen direkt mit der Datenbank kommunizieren können. Auch, welcher Weg ist besser? Aktualisieren Sie die Daten im Datensatz und übertragen Sie sie dann sofort in die Datenbank oder aktualisieren Sie die Datenbank direkt.

    
Lihini 01.10.2011, 13:31
quelle

4 Antworten

28
  

Ich möchte den Zweck von Datensätzen verstehen, wenn wir mit einfachen SQL-Anweisungen direkt mit der Datenbank kommunizieren können.

Warum hast du Essen in deinem Kühlschrank, wenn du einfach jedes Mal ins Geschäft gehen kannst, wenn du etwas essen willst? Denn jedes Mal, wenn du einen Snack willst, zum Supermarkt zu gehen, ist äußerst unbequem .

Der Zweck von DataSets besteht darin, zu vermeiden, direkt mit der Datenbank unter Verwendung einfacher SQL-Anweisungen zu kommunizieren. Der Zweck eines DataSet besteht darin, als eine billige lokale Kopie der Daten zu dienen, die Sie interessieren, so dass Sie keine kostspieligen Aufrufe mit hoher Latenzzeit an die Datenbank machen müssen. Sie lassen Sie zum Datenspeicher einmal fahren, nehmen Sie alles, was Sie für die nächste Woche brauchen, und stopfen Sie es in den Kühlschrank in der Küche, so dass es da ist, wenn Sie es brauchen.

  

Auch, welcher Weg ist besser? Aktualisieren Sie die Daten im Datenbestand und übertragen Sie sie dann sofort in die Datenbank oder aktualisieren Sie die Datenbank direkt?

Sie bestellen ein Dutzend verschiedener Produkte von einer Website. Welcher Weg ist besser: die Artikel einzeln liefern, sobald sie bei ihren Herstellern verfügbar sind, oder warten, bis sie alle verfügbar sind, und sie alle auf einmal versenden? Der erste Weg, Sie erhalten jeden Artikel so schnell wie möglich; der zweite Weg hat niedrigere Lieferkosten. Welcher Weg ist besser ? Wie zum Teufel sollten wir wissen? Das entscheiden Sie selbst!

Die Datenaktualisierungsstrategie, die besser ist, ist diejenige, die die Sache so macht, dass sie den Wünschen und Bedürfnissen Ihrer Kunden besser entspricht. Sie haben uns nicht gesagt, was die Metrik Ihres Kunden für "besser" ist, daher kann die Frage nicht beantwortet werden. Was will Ihr Kunde - die neuesten Sachen, sobald er verfügbar ist, oder eine geringe Liefergebühr?

    
Eric Lippert 01.10.2011, 14:19
quelle
11

Datasets unterstützen die getrennte Architektur. Sie können lokale Daten hinzufügen, daraus löschen und dann mithilfe von SqlAdapter alles an die Datenbank übergeben. Sie können die XML-Datei sogar direkt in das Dataset laden. Es hängt wirklich davon ab, was Ihre Anforderungen sind. Sie können sogar Speicherbeziehungen zwischen Tabellen in DataSet festlegen.

Und übrigens, mit direkten SQL-Abfragen in Ihrer Anwendung eingebettet ist eine wirklich sehr schlechte und schlechte Art, Anwendung zu gestalten. Ihre Anwendung ist anfällig für "SQL Injection". Zweitens, wenn Sie solche in Anwendungen eingebetteten Abfragen schreiben, muss Sql Server seinen Ausführungsplan jederzeit ausführen, während Stored Procedures kompiliert werden und seine Ausführung bereits beim Kompilieren entschieden wird. Auch Sql Server kann seinen Plan ändern, wenn die Daten groß werden. Sie erhalten dadurch eine Leistungsverbesserung. Atleast verwendet gespeicherte Prozeduren und validiert darin Junk-Eingaben. Sie sind von Natur aus resistent gegen Sql-Injektion.

Gespeicherte Prozeduren und Datasets sind der richtige Weg.

Siehe dieses Diagramm:

Bearbeiten: Wenn Sie .NET Framework 3.5, 4.0 verwenden, können Sie die Anzahl der ORMs wie Entity Framework, NHibernate, Subsonic verwenden. ORMs repräsentieren Ihr Geschäftsmodell realistischer. Sie können gespeicherte Prozeduren immer mit ORMs verwenden, wenn einige der Funktionen nicht in ORMs unterstützt werden.

Für zB: Wenn Sie einen rekursiven CTE (Common Table Expression) schreiben, sind gespeicherte Prozeduren sehr hilfreich. Sie werden zu viele Probleme haben, wenn Sie Entity Framework dafür verwenden.

    
TCM 01.10.2011 13:40
quelle
3

Diese Seite erklärt ausführlich, in welchen Fällen Sie sollte ein Dataset verwenden und in diesen Fällen verwenden Sie direkten Zugriff auf die Datenbanken

    
Mansuro 01.10.2011 13:41
quelle
0

Normalerweise übe ich das gerne, wenn ich eine Menge analytischer Prozesse auf einer großen Menge von Daten durchführen muss, werde ich einen Datensatz (oder eine Datentabelle abhängig von der Struktur) füllen. Auf diese Weise ist es ein getrenntes Modell aus der Datenbank.

Aber für DML-Abfragen bevorzuge ich die schnellen Treffer direkt an die Datenbank (vorzugsweise durch gespeicherte Procs). Ich habe festgestellt, dass dies am effizientesten ist, und mit gut abgestimmten Abfragen ist es überhaupt nicht schlecht auf der db.

    
user596075 01.10.2011 13:36
quelle

Tags und Links