137 votes

Quelle est la différence entre ExecuteScalar, ExecuteReader et ExecuteNonQuery ?

Quels sont les différents cas où nous utilisons ces trois éléments ? Où dois-je en utiliser un et où ne dois-je pas le faire ?

234voto

Mark Wilkins Points 29291
  • ExecuteScalar est généralement utilisé lorsque votre requête renvoie une seule valeur. Si elle en renvoie plusieurs, le résultat est la première colonne de la première ligne. Un exemple pourrait être SELECT @@IDENTITY AS 'Identity' .
  • ExecuteReader est utilisé pour tout ensemble de résultats comportant plusieurs lignes/colonnes (par exemple, l'ensemble des résultats de l'enquête), SELECT col1, col2 from sometable ).
  • ExecuteNonQuery est généralement utilisé pour les instructions SQL sans résultat (par exemple, UPDATE, INSERT, etc.).

53voto

umarali1981 Points 191

ExecuteNonQuery() :

  1. fonctionnera uniquement avec les requêtes d'action (Create,Alter,Drop,Insert,Update,Delete).
  2. Renvoie le nombre de lignes affectées par la requête.
  3. Le type de retour est int
  4. La valeur de retour est facultative et peut être assignée à une variable entière.

ExecuteReader() :

  1. fonctionnera avec les requêtes d'action et de non-action (Select)
  2. Renvoie la collection de lignes sélectionnées par la requête.
  3. Le type de retour est DataReader.
  4. La valeur de retour est obligatoire et doit être assignée à un autre objet DataReader.

ExecuteScalar() :

  1. fonctionnera avec les requêtes sans action qui contiennent des fonctions d'agrégation.
  2. Renvoie la valeur de la première ligne et de la première colonne du résultat de la requête.
  3. Le type de retour est un objet.
  4. La valeur de retour est obligatoire et doit être assignée à une variable de type requis.

URL de référence :

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

43voto

Brendan Enrick Points 2892

Chacun est un type d'exécution différent.

  • ExecuteScalar va être le type de requête qui retournera une valeur unique.

    Un exemple serait de renvoyer un identifiant généré après l'insertion.

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

  • ExecuteReader vous donne un lecteur de données qui vous permettra de lire toutes les des colonnes des résultats, une ligne à la fois.

    Un exemple serait d'extraire des informations de profil pour un ou plusieurs utilisateurs.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery est tout SQL qui ne renvoie pas de valeurs, mais mais effectue en fait une certaine forme de travail comme l'insertion, la suppression ou la modification quelque chose.

    Un exemple serait la mise à jour du profil d'un utilisateur dans la base de données.

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

9voto

Greg Beech Points 55270

Extrait de la documentation (note : MSDN est une ressource pratique lorsque vous voulez savoir ce que font les choses !)

ExecuteScalar

Utilisez la méthode ExecuteScalar pour récupérer une valeur unique (par exemple, une valeur agrégée) dans une base de données. Cela nécessite moins de code que d'utiliser la méthode ExecuteReader, puis d'effectuer les opérations nécessaires pour générer la valeur unique à l'aide des données renvoyées par un SqlDataReader.

ExecuteReader

Envoie le CommandText à la connexion et construit un SqlDataReader.

... et de SqlDataReader ...

Fournit un moyen de lire un flux de lignes en avant seulement à partir d'une base de données SQL Server. Cette classe ne peut pas être héritée.

ExecuteNonQuery

Vous pouvez utiliser la fonction ExecuteNonQuery pour effectuer des opérations de catalogue (par exemple, interroger la structure d'une base de données ou créer des objets de base de données tels que des tables), ou pour modifier les données d'une base de données sans utiliser un DataSet en exécutant des instructions UPDATE, INSERT ou DELETE.

8voto

Matt Points 71

Pour ajouter à ce que les autres ont posté :

ExecuteScalar renvoie conceptuellement la colonne la plus à gauche de la première ligne du jeu de résultats de la requête ; vous pourriez exécuter ExecuteScalar un SELECT * FROM staff, mais vous n'obtiendriez que la première cellule des lignes résultantes. Généralement utilisé pour les requêtes qui renvoient une seule valeur. Je ne suis pas sûr à 100% pour SQLServer, mais dans Oracle, on peut ne serait pas l'utiliser pour exécuter une FONCTION (un code de base de données qui renvoie une seule valeur) et s'attendre à ce qu'il vous donne la valeur de retour de la fonction, même si les fonctions renvoient des valeurs uniques Toutefois, si vous exécutez la fonction dans le cadre d'une requête, par exemple SELECT SUBSTR('abc', 1, 1) FROM DUAL, vous obtiendrez la valeur de retour en vertu du fait que celle-ci est stockée dans la cellule supérieure gauche du jeu de lignes résultant.

ExecuteNonQuery est utilisé pour exécuter des procédures stockées, des fonctions et des requêtes qui modifient les données (INSERT/UPDATE/DELETE) ou la structure de la base de données (CREATE TABLE...). En général, la valeur de retour de l'appel est une indication du nombre de lignes affectées par l'opération, mais vérifiez la documentation de la base de données pour vous en assurer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X