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.).
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'
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!):
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.
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.
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
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)
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.
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)
Antworten:
ExecuteScalar
wird 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 seinSELECT @@IDENTITY AS 'Identity'
.ExecuteReader
wird für jede Ergebnismenge mit mehreren Zeilen / Spalten verwendet (zSELECT col1, col2 from sometable
. B. ).ExecuteNonQuery
wird normalerweise für SQL-Anweisungen ohne Ergebnisse verwendet (z. B. UPDATE, INSERT usw.).quelle
ExecuteNonQuery
kann die Anzahl der betroffenen Zeilen zurückgeben.ExecuteNonQuery ():
ExecuteReader ():
ExecuteScalar ():
Referenz-URL:
http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html
quelle
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'
quelle
Aus den Dokumenten (Hinweis: MSDN ist eine praktische Ressource, wenn Sie wissen möchten, was Dinge tun!):
ExecuteScalar
ExecuteReader
... und von SqlDataReader ...
ExecuteNonQuery
quelle
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
quelle
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 derExecuteReader()
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)quelle
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.
quelle
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)
quelle
ExecuteNonQuery: wird normalerweise verwendet, wenn von den SQL-Anweisungen nichts zurückgegeben wird, wie Einfügen, Aktualisieren, Löschen.
ExecuteScalar:
Es wird verwendet, wenn die SQL-Abfrage einen einzelnen Wert zurückgibt.
ExecuteReader
Es wird verwendet, wenn eine SQL-Abfrage oder eine gespeicherte Prozedur mehrere Zeilen / Spalten zurückgibt
Weitere Informationen erhalten Sie hier http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery
quelle