[newbie] Lien entre dataTable et base de données

cabire Messages postés 3 Date d'inscription lundi 16 octobre 2006 Statut Membre Dernière intervention 1 mars 2007 - 1 mars 2007 à 10:32
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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;
                }
            }
        }
     

1 réponse

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 mars 2007 à 17:45
Salut,

Et pourquoi pas faire directement la jointure en SQL ?

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous