SqlCommand oder SqlDataAdapter?

7

Ich erstelle so etwas wie eine kleine Kassiereranwendung, die Aufzeichnungen für Kunden, Mitarbeiter, Dienstleistungen, Verkäufe und Termine führt. Ich verwende Windows-Formulare und innerhalb dieser DataGrids. Ich habe die Datenbank erstellt, die ich für die Anwendung verwenden werde. Ich möchte wissen, ob ich stattdessen SqlCommand-SqlDataReader oder SqlDataAdapter-DataSet verwenden sollte. Welcher Ansatz ist besser?

    
user990692 27.12.2011, 03:55
quelle

5 Antworten

13

Dies hängt stark von der Art der gewünschten Operation ab.

Folgendes ist mein Vorschlag.

  1. Wenn Sie Daten schneller lesen möchten, gehen Sie für SQLDataReader, aber das kommt als Kosten für die Operation, die Sie ergreifen müssen beim Lesen danach auch. Verbindung öffnen Daten lesen Verbindung schließen. Wenn Sie vergessen haben zu schließen, wird die Leistung beeinträchtigt.

  2. Gehen Sie für SQLDataAdapter

    • Wenn Sie schneller lesen und den Vorteil von Disconnected Arch nutzen möchten. von ADO.net
    • Dies wird automatisch die Verbindung schließen / öffnen.
    • Außerdem können Sie das Update in DataSet automatisch in DataBase zurückversetzen. (SqlCommandBuilder)
  3. Verwenden Sie SQLCommand (Dies kommt auch, wenn Sie SQLDataReader für gelesene Daten lesen) und zum Einfügen und Aktualisieren.

    • Dadurch erhalten Sie eine bessere Leistung für das Einfügen und Aktualisieren.

Wenn Sie .NET Frame 3.5 sp1 oder höher verwenden, würde ich auch Linq to SQL oder Entity Framework vorschlagen löse deinen Zweck.

Danke.

    
dotnetstep 27.12.2011, 04:06
quelle
4

SqlDataAdapter

  • speichert Daten auf Ihrem Client und aktualisiert die Datenbank nach Bedarf. So dass es verbraucht mehr Speicher.
  • Auf der anderen Seite müssten Sie nicht sein Verbunden mit Ihrer Datenbank am insert/delete/update/select -Befehl.
  • Es verwaltet Verbindungen intern, sodass Sie sich keine Sorgen machen müssen Das.

Alle guten Sachen von SqlDataAdapter kosten mehr Speicher. Es wird normalerweise für Systeme verwendet, die mehrere Benutzer benötigen, die mit der Datenbank verbunden sind.
Also würde ich sagen, wenn das nicht deine Situation ist, gehe für SqlCommand und das verbundene Modell.

    
atoMerz 27.12.2011 04:20
quelle
2

Wenn Sie diese Komponenten kennen (Core ADO.NET) (Befehl, Verbindung, DataAdapter), würde ich Entity Data Model oder Linq-SQL vorschlagen.

SqlDataAdapter ist eine Hilfsklasse, die implizit SqlCommand , SqlConnection und SqlDataReader verwendet.

    
adatapost 27.12.2011 03:59
quelle
2

Wenn Sie nur Daten lesen und keine Aktualisierungen / Einfügungen / Löschungen vornehmen, ist SqlDataReader schneller. Sie können es auch mit einem DataSet kombinieren. Wenn Sie die Datenzugriffsobjekte mit using -Anweisungen umbrechen, behandelt die Laufzeitumgebung die Verbindungsbereinigungslogik für Sie.

Ein Muster, das ich oft für synchronen Zugriff verwende, ist etwa so:

%Vor%

Bei Aktualisierungen / Löschungen / Einfügungen kann eine SqlDataAdapter eine Überlegung wert sein, aber normalerweise nur, wenn Sie Ihre Daten bereits in DataSet haben. Ansonsten gibt es schnellere / bessere Möglichkeiten, Dinge zu tun.

    
RickNZ 28.12.2011 00:13
quelle
1
  

DataReader - Der Datenreader ist ein Nur-Lese-Readonly-Stream von Daten   aus der Datenbank. Dies macht den Datenleser zu einem sehr effizienten Mittel   zum Abrufen von Daten, da nur ein Datensatz in den Speicher bei a gebracht wird   Zeit. Der Nachteil: Ein Verbindungsobjekt kann nur eines enthalten   Datenreader zu einem Zeitpunkt, so dass wir den Datenreader explizit schließen müssen   wir sind damit fertig. Dadurch wird die Verbindung für andere Zwecke freigegeben. Das   Datenadapterobjekte verwalten das Öffnen und Schließen einer Verbindung für   der auszuführende Befehl

     

DataAdapter - Stellt eine Reihe von SQL-Befehlen und eine Datenbank dar   Verbindung, die zum Füllen des DataSets und zum Aktualisieren der Daten verwendet wird   Quelle. Es dient als Brücke zwischen einem DataSet und einer Datenquelle für   Daten abrufen und speichern. Der DataAdapter stellt diese Brücke zur Verfügung   Mapping Fill, das die Daten im DataSet an die Daten anpasst   in der Datenquelle und Update, die die Daten in den Daten ändert   Quelle, um die Daten im DataSet zu vergleichen. Indem Sie es verwenden, auch DataAdapter   öffnet und schließt die Verbindung automatisch und bei Bedarf.

    
smartyhunter 15.03.2013 16:52
quelle

Tags und Links