Was ist der Unterschied zwischen ExecuteScalar, ExecuteReader und ExecuteNonQuery?


Antworten:


190
  • ExecuteScalarwird normalerweise verwendet, wenn Ihre Abfrage einen einzelnen Wert zurückgibt. Wenn mehr zurückgegeben wird, ist das Ergebnis die erste Spalte der ersten Zeile. Ein Beispiel könnte sein SELECT @@IDENTITY AS 'Identity'.
  • ExecuteReaderwird für jede Ergebnismenge mit mehreren Zeilen / Spalten verwendet (z SELECT col1, col2 from sometable. B. ).
  • ExecuteNonQuery wird normalerweise für SQL-Anweisungen ohne Ergebnisse verwendet (z. B. UPDATE, INSERT usw.).

39
ExecuteNonQuerykann die Anzahl der betroffenen Zeilen zurückgeben.
Sangram Nandkhile

Ich dachte, ExecuteNonQuery wird verwendet, wenn Sie gespeicherte Prozeduren aufrufen müssen, die eine Sammlung von Tabellen zurückgeben.
Gogutz

ExecuteNonQuery funktioniert auch, wenn Sie eine return-Anweisung in einer gespeicherten Prozedur haben. stackoverflow.com/questions/6210027/…
FrenkyB

40

ExecuteNonQuery ():

  1. funktioniert nur mit Aktionsabfragen (Erstellen, Ändern, Löschen, Einfügen, Aktualisieren, Löschen).
  2. Gibt die Anzahl der von der Abfrage betroffenen Zeilen zurück.
  3. Der Rückgabetyp ist int
  4. Der Rückgabewert ist optional und kann einer ganzzahligen Variablen zugewiesen werden.

ExecuteReader ():

  1. funktioniert mit Aktions- und Nichtaktionsabfragen (Auswählen)
  2. Gibt die von der Abfrage ausgewählte Sammlung von Zeilen zurück.
  3. Der Rückgabetyp ist DataReader.
  4. Der Rückgabewert ist obligatorisch und sollte einem anderen Objekt DataReader zugewiesen werden.

ExecuteScalar ():

  1. funktioniert mit Non-Action-Abfragen, die Aggregatfunktionen enthalten.
  2. Gibt den ersten Zeilen- und ersten Spaltenwert des Abfrageergebnisses zurück.
  3. Rückgabetyp ist Objekt.
  4. Der Rückgabewert ist obligatorisch und sollte einer Variablen des erforderlichen Typs zugewiesen werden.

Referenz-URL:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html


38

Jeder ist eine andere Art der Ausführung.

  • ExecuteScalar ist der Abfragetyp, der einen einzelnen Wert zurückgibt .

    Ein Beispiel wäre die Rückgabe einer generierten ID nach dem Einfügen.

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReader gibt Ihnen einen Datenleser zurück, mit dem Sie alle Spalten der Ergebnisse zeilenweise lesen können.

    Ein Beispiel wäre das Abrufen von Profilinformationen für einen oder mehrere Benutzer.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery ist jede SQL, die keine Werte zurückgibt , aber tatsächlich irgendeine Form von Arbeit ausführt, wie das Einfügen, Löschen oder Ändern von etwas.

    Ein Beispiel wäre das Aktualisieren des Benutzerprofils in der Datenbank.

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'


1
Anscheinend können Sie ExecuteReader verwenden, um die von ExecuteScalar und ExecuteNonQuery ausgeführten Aufgaben auszuführen. Warum also die beiden anderen? Leistungsvorteil?
user20358

Ein Grund, um eine übermäßige Verwendung von ExecuteReader zu vermeiden, besteht darin, dass der Reader so lange in der Nähe bleibt, bis Sie damit fertig sind. Mit all diesen möchten Sie einige spezifische Informationen über ihre Funktionsweise erhalten, um sie am effektivsten nutzen zu können. Was ich hier skizziert habe, sind einige gute Richtlinien.
Brendan Enrick

9

Aus den Dokumenten (Hinweis: MSDN ist eine praktische Ressource, wenn Sie wissen möchten, was Dinge tun!):

ExecuteScalar

Verwenden Sie die ExecuteScalar-Methode, um einen einzelnen Wert (z. B. einen Gesamtwert) aus einer Datenbank abzurufen. Dies erfordert weniger Code als die ExecuteReader-Methode und führt dann die Vorgänge aus, die Sie zum Generieren des Einzelwerts mithilfe der von einem SqlDataReader zurückgegebenen Daten benötigen.

ExecuteReader

Sendet den CommandText an die Verbindung und erstellt einen SqlDataReader.

... und von SqlDataReader ...

Bietet eine Möglichkeit zum Lesen eines Nur-Vorwärts-Streams von Zeilen aus einer SQL Server-Datenbank. Diese Klasse kann nicht vererbt werden.

ExecuteNonQuery

Mit ExecuteNonQuery können Sie Katalogoperationen ausführen (z. B. die Struktur einer Datenbank abfragen oder Datenbankobjekte wie Tabellen erstellen) oder die Daten in einer Datenbank ändern, ohne ein DataSet zu verwenden, indem Sie UPDATE-, INSERT- oder DELETE-Anweisungen ausführen.


8

So fügen Sie hinzu, was andere gepostet haben:

ExecuteScalar gibt konzeptionell die am weitesten links stehende Spalte aus der ersten Zeile der Ergebnismenge aus der Abfrage zurück. Sie könnten ExecuteScalar als SELECT * FROM-Mitarbeiter ausführen, aber Sie erhalten nur die erste Zelle der resultierenden Zeilen. Wird normalerweise für Abfragen verwendet, die einen einzelnen Wert zurückgeben. Ich bin mir bei SQLServer nicht 100% sicher, aber in Oracle würden Sie es nicht verwenden, um eine FUNCTION (einen Datenbankcode, der einen einzelnen Wert zurückgibt) auszuführen, und erwarten, dass Sie den Rückgabewert der Funktion erhalten, obwohl Funktionen einzelne Werte zurückgeben. Wenn Sie die Funktion jedoch als Teil einer Abfrage ausführen, z. B. SELECT SUBSTR ('abc', 1, 1) FROM DUAL, wird der Rückgabewert angegeben, da der Rückgabewert ganz links oben gespeichert ist Zelle des resultierenden Rowsets

ExecuteNonQuery wird verwendet, um gespeicherte Datenbankprozeduren, -funktionen und -abfragen auszuführen, die Daten ändern (INSERT / UPDATE / DELETE) oder die Datenbankstruktur ändern (CREATE TABLE ...). In der Regel gibt der Rückgabewert des Aufrufs an, wie viele Zeilen von der Operation betroffen waren. Überprüfen Sie jedoch die DB-Dokumentation, um dies zu gewährleisten


4

ExecuteReader() führt eine SQL-Abfrage aus, die das DBDataReader-Objekt des Datenproviders zurückgibt, das nur Vorwärts- und Nur-Lese-Zugriff für das Ergebnis der Abfrage bietet.

ExecuteScalar()ähnelt der ExecuteReader()Methode, die für Singleton-Abfragen entwickelt wurde, z. B. zum Abrufen einer Datensatzanzahl.

ExecuteNonQuery() keine Abfrage ausführen, die mit Erstellen, Löschen, Aktualisieren, Einfügen funktioniert)


3

ExecuteNonQuery

Diese ExecuteNonQuery-Methode wird nur zum Einfügen, Aktualisieren und Löschen, Erstellen und Einstellen von Anweisungen verwendet. Die ExecuteNonQuery-Methode gibt die Anzahl der Zeilen zurück, die mit INSERT-, DELETE- oder UPDATE-Operationen ausgeführt wurden.

ExecuteScalar

Es ist sehr schnell, einzelne Werte aus der Datenbank abzurufen. Execute Scalar gibt bei Ausführung der SQL-Abfrage oder der gespeicherten Prozedur mit dem Befehlsobjekt einen einzeiligen einspaltigen Wert zurück, dh einen einzelnen Wert. ExecuteReader

Execute Reader wird verwendet, um den Satz von Zeilen bei Ausführung der SQL-Abfrage oder der gespeicherten Prozedur mithilfe des Befehlsobjekts zurückzugeben. Dieser ist nur das Weiterleiten von Datensätzen vorwärts und wird verwendet, um die Tabellenwerte vom ersten bis zum letzten zu lesen.


3

Die ExecuteNonQuery-Methode gibt die Anzahl der Zeilen zurück, die mit INSERT-, DELETE- oder UPDATE-Operationen ausgeführt wurden. Diese ExecuteNonQuery-Methode wird nur zum Einfügen, Aktualisieren und Löschen, Erstellen und Einstellen von Anweisungen verwendet. (Weiterlesen)

ExecuteScalar gibt bei Ausführung der SQL-Abfrage oder der gespeicherten Prozedur mit dem Befehlsobjekt einen einzeiligen einspaltigen Wert zurück, dh einen einzelnen Wert. Es ist sehr schnell, einzelne Werte aus der Datenbank abzurufen. (Weiterlesen)

ExecuteReader wird verwendet, um den Satz von Zeilen bei Ausführung der SQL-Abfrage oder der gespeicherten Prozedur unter Verwendung des Befehlsobjekts zurückzugeben. Dieser ist nur das Weiterleiten von Datensätzen vorwärts und wird verwendet, um die Tabellenwerte vom ersten bis zum letzten zu lesen. (Weiterlesen)


1

ExecuteNonQuery: wird normalerweise verwendet, wenn von den SQL-Anweisungen nichts zurückgegeben wird, wie Einfügen, Aktualisieren, Löschen.

cmd.ExcecuteNonQuery();

ExecuteScalar:

Es wird verwendet, wenn die SQL-Abfrage einen einzelnen Wert zurückgibt.

Int b = cmd.ExcecuteScalar();

ExecuteReader

Es wird verwendet, wenn eine SQL-Abfrage oder eine gespeicherte Prozedur mehrere Zeilen / Spalten zurückgibt

SqlDataReader dr = cmd.ExecuteReader();

Weitere Informationen erhalten Sie hier http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.