Comment utiliser SqlDataReader si je vais avoir plus d'un select dans une procédure stockée
J'ai codé trois instructions select dans une procédure stockée dans Microsoft SQL Server 2005. Les deux instructions select retourner plusieurs nombre de dossiers et le tableau de la liste pour une sélection d'états différents. Une sélection d'enregistrements dans une table principale et l'autre à partir d'une table d'enfant. Dans le code C# je veux obtenir tous ces dossiers et de mettre toutes les données dans un objet. Je suis à l'aide de SqlDataReader. Est-ce possible ou dois-je faire autre chose.
OriginalL'auteur Maddy.Shik | 2009-04-12
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le NextResult méthode sur le datareader pour naviguer avec plusieurs résultats d'une requête.
D'une boucle sur toutes les données que vous feriez quelque chose comme ceci:
Ainsi que l'arrière-plan, et en supposant que le maître resultset vient en premier, le remplissage de maître et les objets de détail qui pourrait être fait comme ceci:
Tout d'abord, construire un dictionnaire de la fiche:
Ensuite, passer à des enregistrements de détail et les ajouter à leur maître:
Vous devez évidemment remplacer les noms de colonne avec ce que vous avez dans vos données, ainsi que de fournir l'initialisation complète du Master et des objets de Détail.
Si le détail du jeu de résultat est trié sur le maître, l'id de la dernière boucle pourrait être optimisée à la seule recherche de chaque maître une fois dans le dictionnaire. Si les jeux de résultats sont bien que de petite taille, le gain ne serait pas énorme.
OriginalL'auteur Peter Lillevold
Pierre solution pour résoudre le problème de la récupération des résultats multiples avec un seul
DataReader
. Cependant, Si vous souhaitez enregistrer vos données à un objet qui reproduit la relation entre le Maître-détail des tables, vous devriez être en utilisant unDataSet
à la place.Ensembles de données peut contenir plusieurs
DataTable
s et de fournir un support complet pour les relations inhérentes entre les tables en permettant la création deDataRelation
s entre les tables. Ensuite, vous pouvez obtenir les enregistrements associés à chaque scénario en appelantGetChildRows()
ouGetParentRows()
à partir de le Maître ou des Détails de tableaux, respectivement.Il y a probablement un grand nombre d'échantillons en ligne qui illustrent comment le faire. Voici un fil de discussion de mon Groupe où j'ai énuméré les étapes et a fourni un peu de code pour illustrer la procédure.
OriginalL'auteur Cerebrus