cabire
Messages postés3Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention 1 mars 2007
-
1 mars 2007 à 10:32
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
3 mars 2007 à 17:45
Bonjour,
A priori j'ai un problème ultra simple (c'est toujours ce que l'on pense au début...):
J'ai une table T1 de données en mémoire dans mon application (dans un dataTable) et je souhaite faire une jointure entre T1 et une autre table (T2) dans ma base de données pour ramener des données.
il y a deux méthodes évidentes possibles :
-première méthode : Ramener toute la donnée de T2 dans l'applicatin et faire la jointure en jouant sur le dataset --> Solution rejetée car la table T2 est volumineuse,
-deuxième méthode : Parcourir T1 et pour chaque ligne faire une requete en base pouir ramner les données-->C'est cette méthode que j'ai employé.
Le problème dans ce cas est qu'a chaque ligne de T1 il faut ouvrir et fermer le reader (cf le bout de code en bas) ; En terme de performance c'est ultra mauvais. Sans doute j'ignore les subtilités d'ADO.net, mais mise à part une solution de type artillerie lourde qui necessite de creer des procedure stockées je n'ai rien trouvé.
Connaissez vous une autre méthode plus efficace ?
Merci
/// <summary>
/// On va parcourir le dtCible et pour chacun des enregistrements on constitue
/// la donnée. On l'ajoute dans le datatable qui va bien.
/// </summary>
public void initData()
{
String tmp = "";
String data = "";
SqlDataReader dr = null;
for (int i = 0; i < dtCible.Rows.Count; i++)
{
DataRow d = dtCible.Rows[i];
tmp = "select nom+'#'+prenom data from T2 where ie_id=" + d["ID"].ToString();
dr = dataCon.execSql2(tmp); //dataCon= objet qui encapusle l'acces à la base + diverses méthodes
if (dr != null)
{
dr.Read();
data = dr["data"].ToString();
dr.Close();
d["DATA"] = data;
}
}
}