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

106

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

nectar
la source
1
J'ai trouvé cet article génial sur le même: webblogsforyou.com
...

Réponses:

190
  • ExecuteScalarest généralement utilisé lorsque votre requête renvoie une valeur unique. S'il renvoie plus, le résultat est la première colonne de la première ligne. Un exemple pourrait êtreSELECT @@IDENTITY AS 'Identity' .
  • ExecuteReaderest utilisé pour tout ensemble de résultats avec plusieurs lignes / colonnes (par exemple, SELECT col1, col2 from sometable).
  • ExecuteNonQuery est généralement utilisé pour les instructions SQL sans résultats (par exemple, UPDATE, INSERT, etc.).
Mark Wilkins
la source
39
ExecuteNonQuerypeut renvoyer le nombre de lignes affectées.
Sangram Nandkhile
Je pensais qu'ExecuteNonQuery est utilisé lorsque vous devez appeler des procédures stockées qui renverront une collection de tables.
Gogutz
ExecuteNonQuery fonctionne également si vous avez une instruction return dans une procédure stockée. stackoverflow.com/questions/6210027/…
FrenkyB
40

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 affectées par la requête.
  3. Le type de retour est int
  4. La valeur de retour est facultative et peut être affectée à une variable entière.

ExecuteReader ():

  1. fonctionnera avec les requêtes Action et 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 affectée à un autre objet DataReader.

ExecuteScalar ():

  1. fonctionnera avec les requêtes sans action qui contiennent des fonctions d'agrégation.
  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 objet.
  4. La valeur de retour est obligatoire et doit être affectée à une variable de type requis.

URL de référence:

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

umarali1981
la source
38

Chacun est une exécution de type différent.

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

    Un exemple serait de retourner 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 serait l'extraction 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 qui effectue en fait une forme de travail comme l'insertion de suppression ou de modification de 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'

Brendan Enrick
la source
1
Il semble que vous puissiez utiliser ExecuteReader pour effectuer les tâches effectuées à la fois par ExecuteScalar et ExecuteNonQuery, alors pourquoi utiliser les deux autres? un avantage de performance?
user20358
Une raison d'éviter de surutiliser ExecuteReader est qu'il gardera ce lecteur dans les parages jusqu'à ce que vous en ayez terminé. Avec tout cela, vous voulez connaître certaines informations spécifiques sur leur fonctionnement afin de les utiliser le plus efficacement possible. Ce que j'ai décrit ici, ce sont de bonnes lignes directrices.
Brendan Enrick
9

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

ExécuterScalaire

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

ExecuteReader

Envoie le CommandText à la connexion et génère un SqlDataReader.

... et depuis SqlDataReader ...

Fournit un moyen de lire un flux de lignes avant uniquement à 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 un DataSet en exécutant des instructions UPDATE, INSERT ou DELETE.

Greg Beech
la source
8

Pour ajouter à ce que d'autres ont publié:

ExecuteScalar renvoie conceptuellement la colonne la plus à gauche de la première ligne de l'ensemble de résultats de la requête; vous pouvez ExecuteScalar une portée SELECT * FROM, mais vous n'obtiendrez que la première cellule des lignes résultantes Généralement utilisée pour les requêtes qui renvoient une valeur unique. Je ne suis pas sûr à 100% de SQLServer mais dans Oracle, vous ne l' utiliseriez pas pour exécuter une FUNCTION (un code de base de données qui renvoie une valeur unique) et vous attendez à ce qu'il vous donne la valeur de retour de la fonction même si les fonctions renvoient des valeurs uniques. Cependant, si vous exécutez la fonction dans le cadre d'une requête, par exemple SELECT SUBSTR ('abc', 1, 1) FROM DUAL, alors cela donnerait la valeur de retour en vertu du fait que la valeur de retour est stockée dans le coin supérieur gauche cellule de l'ensemble de lignes résultant

ExecuteNonQuery serait utilisé pour exécuter des procédures stockées de base de données, des fonctions et des requêtes qui modifient les données (INSERT / UPDATE / DELETE) ou modifient 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 consultez la documentation de la base de données pour garantir cela

Mat
la source
4

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

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

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

Rogers
la source
3

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.

ExécuterScalaire

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

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

Shailendra Mishra
la source
3

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 retournera une valeur de colonne unique sur une seule ligne, c'est-à-dire une valeur unique, lors de l'exécution de la requête SQL ou de la procédure stockée à l'aide de l'objet de commande. Il est très rapide de récupérer des valeurs uniques de la base de données. (Lire la suite)

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

Zia Ur Rahman
la source
1

ExecuteNonQuery: est généralement utilisé lorsque rien n'est renvoyé par les instructions SQL telles que les opérations d'insertion, de mise à jour, de suppression.

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 retourne plusieurs lignes / colonnes

SqlDataReader dr = cmd.ExecuteReader();

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

DotNetLover
la source