Différence entre SqlDataReader.Read et SqlDataReader.NextResult

Quelle est la principale différence entre ces deux méthodes? Sur le site Web msdn, cela est expliqué comme ci-dessous mais je ne le comprends pas.

Read Fait avancer le SqlDataReader à l’enregistrement suivant. (Substitue DbDataReader.Read ().)

NextResult Avance le lecteur de données vers le résultat suivant lors de la lecture des résultats d’instructions Transact-SQL par lots. (Substitue dbDataReader.NextResult ().)

Si votre instruction / proc renvoie plusieurs ensembles de résultats, par exemple, si vous avez deux instructions select dans un seul object Command , vous obtiendrez deux ensembles de résultats.

  • NextResult est utilisé pour se déplacer entre les ensembles de résultats.
  • Read est utilisé pour avancer dans les enregistrements d’un seul jeu de résultats.

Prenons l’exemple suivant:

Si vous avez un proc dont le corps principal est comme:

 .... Proc start SELECT Name,Address FROM Table1 SELECT ID,Department FROM Table2 -- Proc End 

L’exécution du processus ci-dessus produirait deux ensembles de résultats. Un pour Table1 ou première instruction de sélection et l’autre pour l’instruction de select suivante.

Par défaut, le premier jeu de résultats serait disponible pour Read . Si vous souhaitez passer au deuxième jeu de résultats, vous aurez besoin de NextResult .

Voir: Récupération de données à l’aide d’un lecteur de données

Exemple de code à partir du même lien : Récupération de plusieurs ensembles de résultats à l’aide de NextResult

 static void ResortingeveMultipleResults(SqlConnection connection) { using (connection) { SqlCommand command = new SqlCommand( "SELECT CategoryID, CategoryName FROM dbo.Categories;" + "SELECT EmployeeID, LastName FROM dbo.Employees", connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.HasRows) { Console.WriteLine("\t{0}\t{1}", reader.GetName(0), reader.GetName(1)); while (reader.Read()) { Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0), reader.GetSsortingng(1)); } reader.NextResult(); } } } 

Pas ssortingctement une réponse à cette question, mais si vous utilisez la méthode DataTable.Load pour utiliser les données du lecteur plutôt que Reader.Read, notez qu’après l’achèvement de la méthode Load, le lecteur est maintenant placé au début du prochain jeu de résultats, vous ne devez pas appeler la méthode NextResult, sinon vous ignorerez le résultat suivant.

Une simple boucle sur Reader.HasRows autour d’un appel DataTable.Load est tout ce dont vous avez besoin pour traiter plusieurs ensembles de résultats potentiels dans ce scénario.