Comment faire pour remplir le Dataset avec plusieurs tables?
Je suis en train de remplir un DataSet qui contient 2 tables avec un à plusieurs " de la relation.
Je suis l'aide de l'objet DataReader pour y parvenir :
public DataSet SelectOne(int id)
{
DataSet result = new DataSet();
using (DbCommand command = Connection.CreateCommand())
{
command.CommandText = "select * from table1";
var param = ParametersBuilder.CreateByKey(command, "ID", id, null);
command.Parameters.Add(param);
Connection.Open();
using (DbDataReader reader = command.ExecuteReader())
{
result.MainTable.Load(reader);
}
Connection.Close();
}
return result;
}
Mais j'ai seulement un tableau rempli. Comment puis-je atteindre mon objectif - remplir les deux tableaux?
Je voudrais utiliser l'objet DataReader au lieu DataAdapter, si, c'est possible.
Pourquoi vous vous attendriez à ce que les deux tables sont remplies? Votre commande ne contient qu'un seul
Pourquoi ne pas utiliser un
Anusev - je le sais, je suis juste en demandant à tout type de suggestion
preformanse. DataReader est rapide, DataAdapter est plus lent. Ce qui est essentiel dans mon cas
Le DataAdapter utilise également un DataReader sous le capot. stackoverflow.com/a/334667/284240 Le seul avantage d'un lecteur vous permet de lire les enregistrements un à un moment au lieu de charger tous en mémoire.
select
énoncé qui renvoie un tableau unique.Pourquoi ne pas utiliser un
SqlDataAdapter
et ses Fill(...)
méthode au lieu de la DbCommand
?Anusev - je le sais, je suis juste en demandant à tout type de suggestion
preformanse. DataReader est rapide, DataAdapter est plus lent. Ce qui est essentiel dans mon cas
Le DataAdapter utilise également un DataReader sous le capot. stackoverflow.com/a/334667/284240 Le seul avantage d'un lecteur vous permet de lire les enregistrements un à un moment au lieu de charger tous en mémoire.
OriginalL'auteur Andriy Zak | 2012-07-05
Vous devez vous connecter pour publier un commentaire.
Si vous émettez une commande unique avec plusieurs instructions select, vous pouvez utiliser NextResult méthode pour atteindre le prochain jeu de résultats dans le datareader: http://msdn.microsoft.com/en-us/library/system.data.idatareader.nextresult.aspx
Je montre comment il pourrait ressembler à ci-dessous:
result.Load(reader)
. LeLoad
méthode permettra de gérer de multiples résultats.vrai, mais dont le tableau à remplir avec qui jeu de résultats ne peut pas être spécifié avec un jeu de données.De la charge, il va se casser si vous définissez des tables dans un autre ordre. Vous devez aussi état d'autres paramètres.
vous m'avez fait sourire aujourd'hui.
OriginalL'auteur smoothdeveloper
Le remplissage d'un jeu de données avec plusieurs tables peut être fait par l'envoi de plusieurs requêtes à la base de données, ou de manière plus rapide: SÉLECTIONNEZ Plusieurs états peuvent être envoyées vers le serveur de base de données en une seule requête. Le problème ici est que les tables générées à partir des requêtes automatiques noms de Table et de Table1. Cependant, à la génération de noms de table, peuvent être mappées à des noms qui devraient être utilisés dans le jeu de données.
avec l'ajout de TableMappings.Ajouter n'est pas neccassarry
OriginalL'auteur Mohsen Safari
C'est un vieux sujet, mais pour certaines personnes, il pourrait être utile:
Au lieu de faire
adapt.Fill(someDataSet.Tables["Table1"])
vous neadapt.Fill(someDataSet)
. Parce que bien sûr, votre procédure stockée retruns les tables, mais seulement si il retourne vraiment des TABLES et non pas un ensemble de COLONNES à partir de plusieurs tables.Merci pour la réponse, vais essayer ce truc 🙂
OriginalL'auteur CularBytes
Ici est très bonne réponse de votre question
voir l'exemple mentionné ci-dessus page MSDN :-
OriginalL'auteur Pranav
OriginalL'auteur user5311866
OriginalL'auteur Mitesh Gadhiya
OriginalL'auteur Kashif Faraz
Méthode
Load
deDataTable
exécuteNextResult
sur leDataReader
, de sorte que vous ne devez pas appelerNextResult
explicetly lors de l'utilisation deLoad
, sinon même les tables peuvent être perdues.Ici est une solution générique pour charger plusieurs tables à l'aide d'un
DataReader
.OriginalL'auteur Mario Vázquez