Ich frage mich nur, welche Dinge ich beachten muss, wenn ich DataReader und DataAdapter beim Abrufen von Daten aus der Datenbank benutze und was der Unterschied zwischen diesen beiden anderen Datenreadern ist, die offene Verbindung benötigt und der Datenadapter nicht ... In unseren Projekten waren Wenn wir DataReader in ALLEN DAL verwenden, verwenden wir niemals einen Datenadapter. Ich frage mich, in welchem Szenario es besser wäre, DataAdapter + Datatable Combo als DataReader zu verwenden. Vielen Dank im Voraus.
DataReader: Dies wird am besten verwendet, wenn Sie nur Daten im Readonymodus abrufen, Ihre Geschäftseinheit füllen und den Reader schließen möchten. Das ist wirklich schnell.
Nehmen wir an, Sie haben eine Kundenklasse und möchten ein vollständig initialisiertes Objekt mit allen Ihren Kundeneigenschaften wie (Name, Adresse usw.) ausfüllen.
Sie werden hier DataReader verwenden und einfach die Entity füllen und den Reader schließen.
Sie können keine Aktualisierung mit dem Datenreader durchführen.
DataAdapter: Sie können die Daten mit Datenadaptern lesen / aktualisieren, aber es ist weniger schnell beim Lesen der Daten als DataReader.
Sie können die Daten mit DataAdapter aktualisieren, aber mit Reader nicht
Ich favorisiere fast immer den DataReader, wenn ich ADO.NET Sachen mache; Der Grund dafür ist, dass Sie die Daten auf dem Client nicht länger speichern müssen, als Sie benötigen.
Das ist auch etwas die Antwort auf die Verwendung eines DataAdapter zu einem DataSet / Table; wenn Sie die Daten auf dem Client speichern möchten, um sie irgendwie zu bearbeiten - indem Sie sie vor und zurück durchlaufen oder als Set bearbeiten, anstatt die Werte einfach in ein Raster auszugeben, in dem der Reader, IMO, ist eine bessere Option.
DataReader
können Sie jeden Datensatz verarbeiten und wegwerfen. Dies ist nützlich, wenn Sie viele Datensätze ohne Beziehung zueinander verarbeiten möchten. Beispielsweise könnten Sie DataReader
verwenden, wenn Sie einen komplexen Statistikwert aus jedem Datensatz in der Datenbank berechnen oder viele Datensätze in einer lokalen Datei speichern möchten.
DataAdapter
ist etwas anderes, es ist in der Lage, Datensätze im Speicher zu haben. Dadurch können Sie die GUI zum Durchsuchen von Daten, Bearbeiten von Daten usw. machen. Es ist allgemeiner, wird aber mit großen Datenmengen nicht gut funktionieren.
Sie möchten DataAdapters nur verwenden, wenn Sie DataSets verwenden.
Ein Adapter hat die 2 Hauptmethoden Fill()
und Updater()
, um ein Dataset aus der Datenbank zu lesen und in die Datenbank zu schreiben.
Beachten Sie, dass Fill()
eine Verbindung öffnet, einen DataReader verwendet, um alle Datensätze abzurufen und dann die Verbindung zu schließen.
Ohne Datasets und DataTables haben Sie keine Verwendung für DataAdapter.
Die eigentliche Frage ist also: Welche Speicherklassen möchten Sie in Ihrer DAL verwenden? DataSets sind praktikabel und einfach, aber es ist eine alternde Technologie (nicht mehr verbessert).
Vielleicht sollten Sie sich nach einer ORM-Bibliothek (Object Relational Mapping) umsehen. Aber das wird Ihre DataReader / Adapter Frage mit einer viel komplizierteren Auswahl ersetzen.
Ich nie verwende DataReader.
Da ich meine Anwendung stark schichte, ist meine DAL verantwortlich für das Gespräch mit der Datenbank und meine BLL ist verantwortlich für das Erstellen von Objekten, es gibt keine Möglichkeit für die BLL, den DataReader zu schließen, wenn es fertig ist. Stattdessen fordert der BLL ein DataSet / DataTable von der DAL an, welches die DAL erfüllt. Dies geschieht durch Ausführen einer Füllung (zu TomTom's Punkt & gt; schauen Sie sich die Stapelverfolgung an und ja, Sie sehen dort einen DataReader). Die BLL macht dann mit der Ergebnismenge was sie will.
welche Dinge muss ich beachten, wenn Verwenden von DataReader und DataAdapter
DataReader: Gute Low-Level-Schnittstelle. PRetty viel die einzige Schnittstelle - wenn Sie Daten in höhere Strukturen laden, wird die tatsächliche Belastung immer mit einem DataReader durchgeführt.
DataAdapter / DataSet: Sachen, die nicht von Leuten benutzt werden, die strukturierte Programme und netten Code mögen und nicht zufällig eine Reporting-Anwendung schreiben. Verwenden Sie stattdessen ein ORM - NHipernate (gut), Linq2SQL (schlecht), Entity Framework (schlecht) oder eine der anderen besseren Abstraktionen.
Ich denke diese Frage nur, um über Proc und Nachteile zu sprechen und außerhalb des Codes zu sein
* Data Reader ist viel schneller als DataAdapter beim Abrufen von Daten, aber Sie müssen wissen, was genau Disconnected Modus
ist* DataReader- oder Connected-Modus und DataAdapter Disconnected-Modus werden in denselben Szenarios verwendet, aber manchmal ist der Disconnected-Modus besser, wenn Sie Ihre Daten verwenden
* Aber der Disconnectid-Modus wird mit umfangreichen APIs wie DataAdapter, DataView, DataTable und DataSet bereitgestellt. Die mächtige Sache ist, dass Sie Ihren DataAdapter einfach mit SELECT, INSERT, UPDATE, DELETE, Attach you Data aus einer einzelnen Tabelle oder mehreren Tabellen, mit einer Zeile Code Adapter.Fill (DataTable) oder Adapter.Fill (DataSet) und der Auf die gleiche Weise wie beim Aktualisieren von Data Adapter.Update (DataTable)
* Das Aktualisieren hierarchischer Daten im getrennten Modus ist weitaus besser als das Arbeiten im verbundenen Modus, bei dem zusätzlicher Code und zusätzliche Logik verwendet werden müssen. Im getrennten Modus haben Sie die Möglichkeit, nur eingefügte Zeilen oder aktualisierte Zeilen oder gelöschte Zeilen zu aktualisieren Aktualisierungsvorgang ist in Dot Net Transaction eingebunden Adapter.Update (DataTable.Select ("", "", DataViewRowState.Added))
* Im getrennten Modus haben Sie die Möglichkeit, die Versionen jeder einzelnen Zeile in Ihren Daten abzurufen, daneben können Sie die Änderungen an Ihren Daten DataTable.GetChanges ()
vornehmen* Getrennter Modus liefert Ihnen strongTypedDataSet, damit Sie Ihr Datendefinitionsschema und die Relationen erhalten, können Sie Eltern- und Kindzeilen
erhalten* Getrennter Modus bietet Methode zum Abrufen von Zeilen durch PrimaryKey auch Zeilen mit bestimmten Kriterien erhalten DataTable.Select ("FilterExpression", "SortOrder", DataRowViewState)
* Sie können die Berechnung über DataTable durchführen und Ihren Server nicht mit Berechnungen wie ProduktID, Produktname, Preis, Menge, Preis * Menge als Gesamtmenge stören, Sie können einfach Spalte mit bestimmten Kriterien hinzufügen (Preis * Menge)
* Sie können Aggregationen oder Ihre geraubte DataTable, DataTable.Compute ("Summe (Preis)", "Preis & gt; 250")
machen* Im Getrennten Modus haben Sie CommandBuilder, der die sql-Befehle für Sie erstellt, aber nur mit einer einzigen Tabelle arbeitet
Tags und Links c# ado.net sqldatareader