web-dev-qa-db-fra.com

Quand utiliser ExecuteScalar, ExecuteReader, ExecuteNonQuery?

Je suis confondu avec l'usage de

  1. Élément de liste
  2. ExecuteScalar,
  3. ExecuteReader,
  4. ExecuteNonQuery

Quand utiliser ces méthodes?

51
sona

ExecuteScalar () renvoie uniquement la valeur de la première colonne de la première ligne de votre requête.
ExecuteReader () renvoie un objet pouvant itérer sur l’ensemble du jeu de résultats tout en conservant un seul enregistrement en mémoire à la fois.
ExecuteNonQuery () ne renvoie pas de données, mais uniquement le nombre de lignes affectées par une insertion, une mise à jour ou une suppression.

En outre, vous pouvez consulter le type DbDataAdapter , qui inclut un Fill () méthode qui vous permet de télécharger l'intégralité du jeu de résultats dans un DataTable ou DataSet objet, ainsi qu'un certain nombre d'autres capacités.

Enfin, cela semble être un bon moment pour vous familiariser avec MSDN . C'est à cela que sert la documentation: vous avez les noms de méthodes. Va les chercher.

59
Joel Coehoorn

ExecuteScalar: Pour une valeur unique

 Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT SUM(COLUMNNAME) FROM TABLE")); 
 Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT AVG(COLUMNNAME) FROM TABLE")); 

ExecuteReader: Lecture de ligne en mode de transfert

 IdataReader dr = ExecuteReader("SELECT * FROM TABLE"); 
 while(dr.Read())
 {
     //You will get rows values like this dr["ColumnName"]
 } 

ExecuteNonQuery: Pour insérer/supprimer/mettre à jour les lignes dans la table

ExecuteNonQuery("DELETE FROM TABLE");
ExecuteNonQuery("UPDATE TABLE SET COLUMNNAME = 'A'");
43
andy

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

ExecuteNonQuery

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. (En savoir plus sur ExecuteNonQuery)

Documentation MSDN SqlCommand.ExecuteNonQuery

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 est utilisé pour lire les valeurs de la table du premier au dernier . (En savoir plus sur ExecuteReader)

documentation MSDN de SqlCommand.ExecuteReader

Exécute Scalar

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. Il est très rapide de récupérer des valeurs uniques à partir de la base de données. ( En savoir plus sur Execute Scalar )

Documentation MSDN SqlCommand.ExecuteScalar

9

Utilisez ExecuteScalar lorsque votre requête renvoie une valeur unique. S'il renvoie plus de résultats, le résultat final correspond à la première colonne de la première ligne. Un exemple pourrait être SELECT Count(*) from MyTable

Utilisez ExecuteReader pour obtenir un ensemble de résultats comportant plusieurs lignes/colonnes (par exemple, SELECT col1, col2 from MyTable.

Utilisez ExecuteNonQuery pour les instructions SQL qui ne récupéreront pas les résultats de la base de données mais effectueront une mise à jour dans la base de données existante (par exemple, UPDATE, INSERT, etc.).

5
dbw

Ceci est essentiellement simplifié, mais vous pouvez rechercher chacun des termes SQL ou des objets .net ou lire ADO.net sur MSDN pour plus d'informations.

ExecuteScalar lorsque vous appelez une fonction scalaire SQL qui ne renvoie qu'un seul nombre.

ExecuteReader lorsque vous passez un appel SQL qui renverra un jeu d'enregistrements à partir d'une table, ce qui vous donnera un objet SqlDataReader pour récupérer les données en C #.

ExecuteNonQuery est utilisé lorsqu'il n'y a aucune valeur de retour attendue de la part du serveur SQL, un exemple étant une simple instruction UPDATE.

3
Dmitriy Khaykin