2010-09-12 16 views
8

Ich frage mich nur, welche Dinge muss ich bei der Verwendung von DataReader und DataAdapter beim Abrufen von Daten aus der Datenbank und was der Unterschied zwischen diesen beiden anderen der Datenreader offen Verbindung und die datadapter nicht ... In unseren Projekten, die DataReader in ALLEN unserer DAL benutzen, benutzen wir nie einen Datenadapter. Ich frage mich, in welchem ​​Szenario es besser wäre, DataAdapter + Datatable Combo als DataReader zu verwenden. Danke im Voraus.ADO.NET Frage: Wann DataReader, DataAdapter

Antwort

3

Ich favorisiere fast immer den DataReader, wenn ich ADO.NET Sachen tue; Der Grund dafür ist, dass Sie die Daten nicht länger auf dem Client speichern müssen, als Sie benötigen.

Das ist auch etwas die Antwort auf wann ein DataAdapter zu einem DataSet/Table zu verwenden ist; 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.

7

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 sehr schnell.

Say nehme an, Sie eine Kundenklasse haben und Sie wollen mit allen Ihren Kunden Eigenschaften wie gefüllt voll initilized Objekt haben (Name, Adresse etc ..)

Sie Datareader hier verwenden, und füllen Sie einfach das Unternehmen und Leser schließen.

Sie können keine Aktualisierung mit Datenreader durchführen.

DataAdapter: Sie können die Daten mit Datenadaptern lesen/aktualisieren, aber es ist weniger schnell beim Lesen der Daten dann DataReader.

Sie können die Daten mit Dataadapter aktualisieren, aber mit Leser werden Sie nicht

1

welche Dinge, die ich berücksichtigen müssen, wenn DataReader- und Dataadapter

mit

Datareader: Gut niedrige 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: Dinge, 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.

3

DataReader können Sie jeden Datensatz verarbeiten und wegwerfen, was gut ist, wenn Sie viele Datensätze ohne Beziehung zueinander verarbeiten möchten. Sie könnten beispielsweise 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, Sie haben Datensätze im Speicher 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.

+0

Kann Datenadapter eine gute Wahl sein Fall von Dumping Millionen von Datensätzen (zB: 2-3 Millionen Datensätze, die ich in meiner Datentabelle habe) in der Datenbank ??? –

3

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, verwenden Sie einen DataReader, um alle Datensätze abzurufen, und schließen Sie dann die Verbindung.

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.

+0

Können Daten Datapater eine gute Wahl sein im Falle von Dumping Millionen von Datensätzen (zB: 2-3 Millionen Datensätze, die ich in meiner Datentabelle habe) in Datenbank? –

+2

Versuchen Sie einfach, zu viele Faktoren beteiligt. Stellen Sie auch keine Fragen in Kommentaren, dies ist kein Forum. Suchen Sie nach vorhandenen und verwenden Sie andernfalls die Schaltfläche Fragen. –

+0

Können Sie mir bitte mit dieser Frage helfen: http://stackoverflow.com/questions/37970073/getting-error-while-inserting-datatables-records-in-my-database-table –

2

I nie verwenden 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 TomToms Punkt> schaue auf den Stack-Trace und ja, du wirst dort einen DataReader sehen). Die BLL macht dann mit der Ergebnismenge was sie will.

+0

-1: Dies beantwortet nicht die Frage. Das OP hat keine Alternativen zu DataReader und DataAdapter angefordert. –

+1

Ich stimme nicht zu: Er fragte: "In welchem ​​Szenario wäre es besser DataAdapter + Datatable Combo zu verwenden als mit DataReader" und ich antwortete (oder trug zumindest zur Diskussion bei), indem ich eine Beschreibung der Art und Weise, wie ich Dinge entworfen habe, gab. Wenn das Design, das ich beschrieben habe, wie seine Anwendung klingt, dann wäre mein Vorschlag, den DataAdapter über den DataReader zu verwenden, gültig. Übrigens, ich pumpe den DataReader nicht. Ich persönlich hatte nur keinen Grund, es zu benutzen, wenn ich die Datenbank nicht von der Präsentationsschicht aus anrufe, was ich nicht tue. Bitte überdenken Sie Ihre Down-Abstimmung. – Brad

0

Ich denke, diese Frage nur über proc und Nachteile zu sprechen, und Seite ist aus dem Code

* Daten Reader ist viel schneller als Dataadapter in Abrufen von Daten, aber Sie müssen wissen, was genau Disconnected Modus

* Der DataReader- oder Connected-Modus und der DataAdapter Disconnected-Modus werden in den gleichen Szenarien verwendet, aber manchmal ist der Disconnected-Modus besser, wenn Sie Ihre Daten verwenden , DataView, DataTable und DataSet. 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 Das Aktualisieren von hierarchischen Daten im getrennten Modus ist weitaus besser als das Arbeiten im verbundenen Modus, der zusätzlichen Code und zusätzliche Logik verwenden muss, um im diskonnektierten Modus zu bleiben Nur eingefügten Zeilen oder aktualisierten Zeilen oder gelöscht Zeilen zu aktualisieren, neben Aktualisierungsoperation innerhalb Dot Net Transaktion adapter.Update gewickelt wird (DataTable.Select („“, „“, DataViewRowState.Added))

* im getrennten Modus Sie bekam die Fähigkeit, die v Sie können auch die Änderungen an Ihren Daten DataTable.GetChanges()

* Disconnected Modus bieten Ihnen strongTypedDataSet, so erhalten Sie Ihre Datendefinition Schema und die Beziehungen, die Sie Eltern bekommen können und untergeordnete Zeilen

* Getrennte Modus bieten Methode zum Abrufen von Zeilen von PrimaryKey auch Zeilen mit bestimmten Kriterien DataTable erhalten.Wählen Sie ("FilterExpression", "SortOrder", DataRowViewState)

* Sie können die Berechnung über DataTable und stören Sie Ihren Server nicht mit Berechnungen wie ProduktID, Produktname, Preis, Menge, Preis * Menge als Gesamt, Sie können leicht Spalt mit bestimmten Kriterien (Preis * Menge) in

* Sie Aggregationen oder Ihren geschnappt Datatable, DataTable.Compute machen können ("Sum (Preis)", "Preis> 250")

* im Offlinemodus Sie haben CommandBuilder, der es die sqlcommands für Sie erstellt, aber es funktioniert nur mit einer einzigen Tabelle