2010-03-08 7 views

Antwort

26

ExecuteScalar gibt nur den ersten Wert aus der ersten Zeile des Datasets zurück. Intern wird es wie ExecuteReader() behandelt, ein DataReader wird geöffnet, der Wert wird ausgewählt und der DataReader wird danach zerstört. Ich habe mich auch immer über dieses Verhalten gewundert, aber es hat einen Vorteil: Es findet innerhalb des Rahmenwerks statt ... und Sie können nicht mit dem Rahmen in den Arten der Geschwindigkeit konkurrieren.

Bearbeiten von rwwilden: einen Blick mit Reflektor Taking innen SqlCommand.ExecuteScalar() Sie diese Zeilen sehen:

SqlDataReader ds = this.RunExecuteReader(
    CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar"); 
obj2 = this.CompleteExecuteScalar(ds, false); 

Genau das, was im Inneren ExecuteReader passiert. Ein weiterer Vorteil ist, dass ExecuteScalarnull zurückgibt, wenn keine Daten gelesen werden. Wenn Sie ExecuteReader verwenden, müssen Sie dies selbst überprüfen.

+0

+1 für die Verwendung von Reflektor. – Steven

13

Von SqlCommand.ExecuteScalar Method

Verwenden Sie die ExecuteScalar Methode einen einzelnen Wert abrufen (zB ein Gesamtwert) aus einer Datenbank. Dies erfordert weniger Code als die ExecuteReader-Methode, und dann die Operationen durchführen, die Sie Notwendigkeit, die einzelnen Wert unter Verwendung der Daten von einem SqlDataReader zurück erzeugen.

Auch von What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

  • ExecuteReader: Verwenden Sie für Daten zugreifen. Es bietet ein Forward-only, schreibgeschütztes verbundenes Recordset.
  • ExecuteNonQuery: Verwenden Sie für Daten Manipulation, wie Einfügen, Aktualisieren, Löschen.
  • ExecuteScalar: Verwenden für das Retrivieren 1 Zeile 1 Spalte. Wert, d.h. Einzelwert. zB: zum Abrufen der Aggregatfunktion. Es ist schneller als andere Möglichkeiten von Abruf eines einzelnen Wertes aus der DB.
2

Wenn Sie einen einzelnen Wert von Ihrer Abfrage oder SP zurückgegeben haben, ist es immer besser, ExecuteScalar() zu verwenden, da der erste Wert des Ergebnisses abgerufen wird. Daher ist dies in einer solchen Situation schneller.

2

Führen Sie Scalar aus, um einen einzelnen Wert aus der Datenbank zu erhalten, während Reader ausgeführt wird, um mehrere Datensätze in DataTable zu übernehmen.

4

Von ExecuteScalar Seite auf MSDN:

Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader

So ist es nicht schneller oder besser, sondern verwendet wird, um die Menge an Code geschrieben zu reduzieren, wenn nur ein Wert benötigt wird.

0

ExecuteScalar() benötigt weniger Ressourcen als ExecuteReader(), da später die Daten aus mehreren Spalten aus der Datenbank zurückgegeben werden.

ExecuteReader() wird die SqlDataReader Instanziieren die Strom basiert und abfragen, um die Ergebnisse aus der Datenquelle

Verwandte Themen