web-dev-qa-db-fra.com

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

Quels sont les différents cas où nous utilisons ces trois? Où devrais-je en utiliser un et où ne devrais-je pas?

97
nectar
  • ExecuteScalar est généralement utilisé lorsque votre requête renvoie une valeur unique. S'il en retourne plus, 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 jeu de résultats comportant plusieurs lignes/colonnes (par exemple, SELECT col1, col2 from sometable).
  • ExecuteNonQuery est généralement utilisé pour les instructions SQL sans résultat (par exemple, UPDATE, INSERT, etc.).
178
Mark Wilkins

ExecuteNonQuery ():

  1. fonctionnera uniquement avec les requêtes d’action (créer, modifier, supprimer, insérer, mettre à jour, supprimer).
  2. Renvoie le nombre de lignes effectuées par la requête.
  3. Le type de retour est int
  4. La valeur renvoyée est facultative et peut être affectée à une variable entière.

ExecuteReader ():

  1. fonctionnera avec les requêtes Action et Non-Action (sélectionnez)
  2. Retourne 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 affectée à un autre objet DataReader.

ExecuteScalar ():

  1. fonctionnera avec les requêtes non-actions contenant des fonctions d'agrégat.
  2. Renvoie la première ligne et la première valeur de colonne du résultat de la requête.
  3. Le type de retour est object.
  4. La valeur de retour est obligatoire et doit être affectée à une variable du type requis.

URL de référence:

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

38
umarali1981

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

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

    Un exemple renverrait 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 colonnes des résultats, une ligne à la fois.

    Un exemple consisterait à extraire des informations de profil pour un ou plusieurs utilisateurs.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery est un code SQL qui ne renvoie pas de valeurs, mais effectue en réalité une forme de travail comme l'insertion, la suppression ou la modification de quelque chose.

    Un exemple consisterait à mettre à jour le profil d'un utilisateur dans la base de données.

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

37
Brendan Enrick

À partir de la documentation (note: MSDN est une ressource pratique pour savoir ce que font les choses!):

ExecuteScalar

Utilisez la méthode ExecuteScalar pour extraire une valeur unique (par exemple, une valeur agrégée) d'une base de données. Cela nécessite moins de code que l'utilisation de la méthode ExecuteReader, puis l'exécution des opérations nécessaires à la génération de la valeur unique à l'aide des données renvoyées par un SqlDataReader.

ExecuteReader

Envoie le CommandText à la connexion et crée un SqlDataReader.

... et de SqlDataReader ...

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

ExecuteNonQuery

Vous pouvez utiliser 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 de DataSet en exécutant les instructions UPDATE, INSERT ou DELETE.

9
Greg Beech

Pour ajouter à ce que d'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 pouvez exécuter ExecuteScalar une portée SELECT * FROM, mais vous obtiendrez uniquement la première cellule des lignes résultantes. Généralement utilisé pour les requêtes qui renvoient une valeur unique. Je ne suis pas sûr à 100% de SQLServer mais dans Oracle, vous ne voudriez pas l'utiliser pour exécuter une FONCTION (un code de base de données qui renvoie une valeur unique) et espérez qu'il vous fournisse 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 donne alors la valeur de retour en vertu du fait que la valeur de retour est stockée dans la cellule la plus à gauche du jeu de lignes résultant.

ExecuteNonQuery serait utilisé pour exécuter des procédures, fonctions et requêtes stockées dans la base de données modifiant les données (INSERT/UPDATE/DELETE) ou modifiant la structure de la base de données (CREATE TABLE ...). En règle générale, la valeur de retour de l'appel indique le nombre de lignes affectées par l'opération, mais consultez la documentation de la base de données pour vous en assurer.

8
Matt

ExecuteReader() exécute une requête SQL qui renvoie l'objet DBDataReader du fournisseur de données qui fournit un accès en lecture seule et en lecture seule au résultat de la requête.

ExecuteScalar() est similaire à la méthode ExecuteReader() conçue pour les requêtes uniques, telles que l'obtention d'un nombre d'enregistrements.

ExecuteNonQuery() exécuter une requête qui ne fonctionne pas avec créer, supprimer, mettre à jour, insérer)

4
Rogers

La méthode ExecuteNonQuery renverra le nombre de lignes effectuées avec les opérations INSERT, DELETE ou UPDATE. Cette méthode ExecuteNonQuery sera utilisée uniquement pour les instructions insert, update et delete, create et SET. (Lire la suite)

ExecuteScalar renverra une valeur de colonne unique à ligne unique, c'est-à-dire une valeur unique, lors de l'exécution d'une requête SQL ou d'une procédure stockée à l'aide d'un objet de commande. Il est très rapide de récupérer des valeurs uniques dans une base de données. (Lire la suite)

ExecuteReader sera utilisé pour renvoyer l'ensemble de lignes lors de l'exécution d'une requête SQL ou d'une procédure stockée à l'aide d'un objet de commande. Celui-ci sert uniquement à la récupération des enregistrements et permet de lire les valeurs de la table du premier au dernier. (Lire la suite)

3
Zia Ur Rahman

ExecuteNonQuery

Cette méthode ExecuteNonQuery sera utilisée uniquement pour les instructions insert, update et delete, create et SET. La méthode ExecuteNonQuery renverra le nombre de lignes effectuées avec les opérations INSERT, DELETE ou UPDATE.

ExecuteScalar

Il est très rapide de récupérer des valeurs uniques dans une base de données. Execute Scalar renverra une valeur de colonne unique à ligne unique, c'est-à-dire une valeur unique, lors de l'exécution d'une requête SQL ou d'une procédure stockée à l'aide d'un objet de commande. ExecuteReader

Execute Reader sera utilisé pour renvoyer le jeu de lignes lors de l'exécution d'une requête SQL ou d'une procédure stockée à l'aide d'un objet de commande. Celui-ci sert uniquement à la récupération des enregistrements et permet de lire les valeurs de la table du premier au dernier.

3
Shailendra Mishra

ExecuteNonQuery: est généralement utilisé quand les instructions SQL ne renvoient rien, telles que les opérations insert, update, delete.

cmd.ExcecuteNonQuery();

ExecuteScalar:

Il sera utilisé lorsque la requête SQL renvoie une valeur unique.

Int b = cmd.ExcecuteScalar();

ExecuteReader

Il sera utilisé lorsque la requête SQL ou la procédure stockée renvoie plusieurs lignes/colonnes.

SqlDataReader dr = cmd.ExecuteReader();

pour plus d'informations, cliquez ici http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

1
DotNetLover