Récuperation de résultats de requête

cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008 - 25 juin 2008 à 16:01
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008 - 3 juil. 2008 à 19:46
Bonjour à tous




J’essai de faire un petit moteur de recherche pour une base
de donnée,


Je récupère ce qui a été tapé dans le textBox de recherche, je le découpe
 et puis avec chaque mot je fais une
recherche dans la BD





Mon code est le suivant :


OleDbConnection

connection = newOleDbConnection();




connection.ConnectionString = "cnx";






connection.Open();







int i;







string searchText;



searchText =
txtSearch.Text;





string[] sep_result = searchText.Split(' ');







for(i=0;
i<sep_result.Length;i++)




        {





OleDbDataAdapter
da = newOleDbDataAdapter("SELECT
* FROM matable WHERE COL1 LIKE '%" + sep_result[i] + "%'", connection);






           
DataSet ds = newDataSet();






           
da.Fill(ds);



lbltest.Text +=ds.Tables[i].Rows[i].ItemArray[i].ToString()
+ "
";  






     
}
connection.Close();





Mon problème c’est que si j’ai plus qu’un mot de taper j’ai l’erreur
suivante  : Impossible de trouver la table
1.


Alors
en changenat l'indice dans la table est row :



lbltest.Text +=ds.Tables[0].Rows[0].ItemArray[0].ToString() +
"
"; 



Ca marche à moitié puisque ca ne me retourne qu’un seul résultat
par mot


De l’aide svp car je ne vois pas d’issus    

3 réponses

cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
25 juin 2008 à 16:09
Autre précision j'ai essayer avec un cotrole DataList comme suit:

 dList.DataSource = ds.Tables[0].DefaultView;
 dList.DataBind();

le probléme avec ca c'est que ca ne retourne que les résultats du dernier mot taper
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
28 juin 2008 à 22:25
Salut,

Plusieurs remarques :
- renseignes toi sur le problème d'injection et sur le concept de requête paramétrée
- ta façon de batir ta chaine est loin d'etre performante (http://blogs.codes-sources.com/coq/archive/2007/07/28/un-bon-moyen-de-se-souvenir-de-l-ami-stringbuilder.aspx)
- dans ton cas, passer par un DataSet n'a pas de sens
- tu devrais relire la doc de la classe DataTable & co (et celle des autres classes aussi)
- utilises la construction try/catch/finally pour gérer la connexion/déconnexion

Tu devrais passer par OleDbCommand (avec une requête paramétrée) et générer directement ta chaine (avec un StringBuilder) en navigant dans les résultats directement avec l'instance de OleDbDataReader (obtenue via la méthode ExecuteReader d'OleDbCommand).

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
3 juil. 2008 à 19:46
merci pour les conseils, ca va surement m'aider
0
Rejoignez-nous