Ajax+basede bonnée+autocomplétion

cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007 - 13 mai 2007 à 05:35
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 - 29 mai 2007 à 10:04
Bonsoir,
Dans le cadre d'une application, je souhaiterais réaliser une autocomplétion.
J'utilise VS2005, je code en asp.net C# avec ajax en plus.
J'ai vu dans ma boite à outils ajax toolkit le control AutoCompleteExtender, c'est celui que je souhaite utiliser avec un web service.
Mon problème se trouve au niveau du webservice, je ne sais pas comment l'utiliser pour pouvoir réaliser mon autocomplétion.
Cette autocomplétion est relié à un texbox. (j'ai dejà paramétré le control AutoCompleteExtender pour qu'il puise utilisé le webservice)
Quand l'utisateur, entre la première lettre d'un mot par exemple, une liste de choix doit s'afficher (comme pour le google suggest).
La liste de choix se trouve dans une base de données type access 2003.
Si quelqu'un pouvait m'aider en m'expliquant quoi faire au niveau du webservice ce serait très aimable de sa part.
Merci.

13 réponses

yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
14 mai 2007 à 12:17
Salut shani

voila la structure que tu dois utiliser pour utiliser ton webservice avec le composant autocomplete





<hr />
using System;
using System.Collections.Generic;
using System.Web.Services;
using System.Data.SqlClient;


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class AutoComplete : WebService
{
    public AutoComplete()
    {
    }


    [WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public string[] GetCompletionList(string prefixText, int count)
    {
            //ton traitement ici
     }
}





<hr />


ensuite tu n'as plus qu'a paramétrer ton controle de cette manière





<hr />
           





<hr />
si les résultats de ta requete son important je te conseille de laisser le "MinimumPrefixLength" à 3 sinon met le à 1.

Voila bonne journée
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
14 mai 2007 à 16:27
Salut Yanis7518,


Je te remercie pour ta réponse mais ce n'est pas du tout ce que je recherche.


Je connais la structure du web service là où je bloque c'est au niveau de mon traitement : je dois me connecter à ma base de données Access 2003 pour récupérer le champ qui m'intéresse.


J'ai cru comprendre au détour de mes recherches que si j'utilise une base de données Access je dois utilisé non pas System.Data.SqlClient (qui est utilisé pour les base de données sql server) mais plutot System.Data.OleDb (ado.net).

On m'avait aussi dit d'utiliser des datareader, des dataset et des sqlcommand. Après quelques recherches j'ai fini par m'embrouillé.

Ce que j'aimerais, c'est une aide au niveau de mon traitement :

- comment se connecter à ma base Access ?
- comment récuper mon champs pour ensuite faire mon autocomplétion ?

Voilà ce que je recherche.

Au niveau du paramétrage de mon controle AutoCompleteExtender, c'est déjà fait il est déjà paramétré avec tous les renseignements nécessaires.

Merci encore, mais celà ne correspond pas à ce que je recherche.
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
14 mai 2007 à 17:00
désolé j'avais mal compris

donc pour te connecter a ta base Access via OLE voila le code
<hr />
OleDbConnection connec = new OleDbConnection;

connec.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;UserID=Admin;DataSource=C:\\MaBase.mdb;"; 
connec.Open();

<hr />

ensuite tu as juste à executer ta requete

<hr />string requete = "SELECT tavalue FROM ...";
OleDbCommand tmpcmd = new OleDbCommand(requette, connect);
OleDbDataReader tmpreader = tmpcmd.ExecuteReader();
while(tmpreader.Read())
{
   console.Writeline(tmpreader.getstring(0));
}
tmpreader.close();
connec.close();

<hr />

voila je pense que la j'ai repondu a ta question (enfin j'espere )
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
14 mai 2007 à 17:25
a la place du console.writeline  tu stock tes valeurs dans un tableaux de string
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
14 mai 2007 à 20:03
Re Yanis,
j'ai testé ton code mais ca ne fonctionne pas. Quand tu me dis de stock mes valeurs dans un tableau de string, c'est-à-dire !?

voici le code que j'ai tapé. J'avais tester avec le console.writeLine mais ca ne donnait rien.

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;




/// <summary>
/// Description résumée de autocomprs
/// </summary>
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class autocomprs : System.Web.Services.WebService {


    public autocomprs () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
        //InitializeComponent();
    }


    [WebMethod]
    public string[] AutoSuggest(string prefixText, int count) {


        OleDbConnection connec = new OleDbConnection();


        connec.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;DataSource=base.mdb;";


        connec.Open();


        string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText' ORDER BY Nom";


        OleDbCommand tmpcmd = new OleDbCommand(requete, connec);


        OleDbDataReader adaption = tmpcmd.ExecuteReader();     


        while(adaption.Read())
        {


            Console.WriteLine(adaption.GetString(0));


        }


        adaption.Close();
        connec.Close();


    }


}

Si tu pouvais m'expliquer plus en détail l'utilisation du tableau de string ce serait très sympa. Merci.
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
15 mai 2007 à 09:34
tu as une erreur au niveau de cette ligne

string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText' ORDER BY Nom";

tu dois rajouter le % pour lui indiquer qu'il doit te retourner tous les mots commençant par ton préfixe et tu obtiens :

string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText%' ORDER BY Nom";
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
15 mai 2007 à 19:39
Re salut Yanis,
J'ai corrigé l'erreur que j'avais néanmoins lorsque je lance l'application une erreur m'est retournée :

Erreur 1 'autocomprs.AutoSuggest(string, int)' : tous les chemins de code ne retournent pas nécessairement une valeur.

voici le code corriger, si tu arrive à trouver où se trouve l'erreur ... moi je pense que c'est au niveau des arguments déclarer dans la méthode utilisée !? :

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;




/// <summary>
/// Description résumée de autocomprs
/// </summary>
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class autocomprs : System.Web.Services.WebService {


    public autocomprs () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
        //InitializeComponent();
    }


    [WebMethod]
    public string[] AutoSuggest(string prefixText, int count) {


        OleDbConnection connec = new OleDbConnection();


        connec.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;DataSource=base.mdb;";


        connec.Open();


        string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText%' ORDER BY Nom";


        OleDbCommand tmpcmd = new OleDbCommand(requete, connec);


        OleDbDataReader adaption = tmpcmd.ExecuteReader();     


        while(adaption.Read())
        {


            Console.WriteLine(adaption.GetString(0));


        }


        adaption.Close();
        connec.Close();


    }


}

Merci encore pour l'aide que tu m'apporte.
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
15 mai 2007 à 19:39
Re salut Yanis,
J'ai corrigé l'erreur que j'avais néanmoins lorsque je lance l'application une erreur m'est retournée :

Erreur 1 'autocomprs.AutoSuggest(string, int)' : tous les chemins de code ne retournent pas nécessairement une valeur.

voici le code corriger, si tu arrive à trouver où se trouve l'erreur ... moi je pense que c'est au niveau des arguments déclarer dans la méthode utilisée !? :

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;




/// <summary>
/// Description résumée de autocomprs
/// </summary>
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class autocomprs : System.Web.Services.WebService {


    public autocomprs () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
        //InitializeComponent();
    }


    [WebMethod]
    public string[] AutoSuggest(string prefixText, int count) {


        OleDbConnection connec = new OleDbConnection();


        connec.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;DataSource=base.mdb;";


        connec.Open();


        string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText%' ORDER BY Nom";


        OleDbCommand tmpcmd = new OleDbCommand(requete, connec);


        OleDbDataReader adaption = tmpcmd.ExecuteReader();     


        while(adaption.Read())
        {


            Console.WriteLine(adaption.GetString(0));


        }


        adaption.Close();
        connec.Close();


    }


}

Merci encore pour l'aide que tu m'apporte.
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
15 mai 2007 à 19:39
Re salut Yanis,
J'ai corrigé l'erreur que j'avais néanmoins lorsque je lance l'application une erreur m'est retournée :

Erreur 1 'autocomprs.AutoSuggest(string, int)' : tous les chemins de code ne retournent pas nécessairement une valeur.

voici le code corriger, si tu arrive à trouver où se trouve l'erreur ... moi je pense que c'est au niveau des arguments déclarer dans la méthode utilisée !? :

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;




/// <summary>
/// Description résumée de autocomprs
/// </summary>
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class autocomprs : System.Web.Services.WebService {


    public autocomprs () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
        //InitializeComponent();
    }


    [WebMethod]
    public string[] AutoSuggest(string prefixText, int count) {


        OleDbConnection connec = new OleDbConnection();


        connec.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;DataSource=base.mdb;";


        connec.Open();


        string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText%' ORDER BY Nom";


        OleDbCommand tmpcmd = new OleDbCommand(requete, connec);


        OleDbDataReader adaption = tmpcmd.ExecuteReader();     


        while(adaption.Read())
        {


            Console.WriteLine(adaption.GetString(0));


        }


        adaption.Close();
        connec.Close();


    }


}

Merci encore pour l'aide que tu m'apporte.
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
15 mai 2007 à 19:41
oups désolée pour le triple envoie, problème avec des coupures de courants, je pensais que ce n'est pas envoyé.

Mea culpa.
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
16 mai 2007 à 10:13
la fonction du webservice doit renvoyer un tableau de string

public string[] AutoSuggest(string prefixText, int count) {
//
}

donc il te suffit de rajouter ça dans ton code

<hr />
public string[] AutoSuggest(string prefixText, int count) {

List<string> taliste = new List<string>();

//
//ton code
//

while(adaption.Read())
        {

            //Console.WriteLine(adaption.GetString(0));

            taliste.add(adaption.GetString(0));
      }

        adaption.Close();
        connec.Close();

    }

return taliste.toArray()
}

 

<hr />

voila la tu devrai plus avoir d'erreur
0
cs_Shany Messages postés 29 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 3 juin 2007
29 mai 2007 à 03:28
Re salut Yanis,
Comme je te l'ai dit en MP, j'ai toujours quelque souçis pour réaliser cette autocompression. Cette fois-ci, c'est le type List qui n'est pas reconnu. Je commence sérieusement à desespérer. Si tu pouvais m'aider encore une fois ce serait très sympa. Merci.
Voici le code :

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;

/// <summary>
/// Description résumée de autocomprs
/// </summary>
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class autocomprs : System.Web.Services.WebService {

    public autocomprs () {

        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
        //InitializeComponent();
    }

    [WebMethod]
    public string[] AutoSuggest(string prefixText, int count) {
        List<string> maliste new List<string>();>ERREUR
       
        OleDbConnection connec = new OleDbConnection();

        connec.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;DataSource=base.mdb;";

        connec.Open();

        string requete = "SELECT Nom FROM base where Nom LIKE 'prefixText%' ORDER BY Nom";

       
        OleDbCommand tmpcmd = new OleDbCommand(requete, connec);

        OleDbDataReader adaption = tmpcmd.ExecuteReader();     

        while(adaption.Read())
        {

            //Console.WriteLine(adaption.GetString(0));

            maliste.add(adaption.GetString(0));

        }

        adaption.Close();
        connec.Close();

        return maliste.ToArray();
    }

}
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
29 mai 2007 à 10:04
salut shany

à la place de

using System.Collections;

tu met

using System.Collections.Generic;
0
Rejoignez-nous