Récuperation de resultat de la requete select d'une bdd mysql via un webservice [Résolu]

smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 14 juin 2013 à 00:41 - Dernière réponse :  khalilip
- 28 nov. 2014 à 22:12
Bonsoir,
Alors là je cherche dans mon app mobile réalisée sous windows phone avec c# , récuperer le resultat de ma requete select . alors j'ai créé un webservice par WCF et voilà on detail ce que j'ai fais:

Dans le fichier IService.cs je défini ma fonction "SelectSociete()" de selection :
[OperationContract]
        string SelectSociete();


et puis dans le IService.svc.cs j'écrit le code de ma fonction comme suit:
  public string SelectSociete()
        {
            //Object MysqlConnection
            MySqlConnection connection;
            string server;
            string database;
            string uid;
            string password;
            //Paramétre de la base
            server = "localhost";
            database = "gare_tetouan";
            uid = "root";
            password = "";
            //String
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            //Ouverture de la connection
            connection.Open();
            //Préparation de la requete
            string query = "SELECT nom_societe FROM `societe`";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            //Exécution de la requette
            String nom=(String)cmd.ExecuteScalar();
            //fermeture de la connection
            connection.Close();
            //TEST de retour
            return nom;
        }


ensuite je vais remplire un combobox (ou une ListPicker)de ce qu'on va recuperer comme resultat de notre requete select, dans ma page accueil.xaml.cs où j'aurai mon combo et dans l'evenement du load de l'application

 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
           ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
            ComboBox1.Items.Add(client.SelectSocieteAsync());

        }

 



Surement j'ai des erreurs
mais lesquel et que dois je faire

SOS tout aide sera utile : doc ou guide ou tutorial ou idée tout peut me servire

et Merci d'avance
Afficher la suite 

16 réponses

Répondre au sujet
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 21 juin 2013 à 15:26
+3
Utile
ce n'est pas possible de faire :
list=client.SelectSocieteAsync(list);
parceque SelectSocieteAsync() est de type void !!!

bon j'ai fais quelques modifications : pour ma fonction :
public List<string> SelectSociete()
        {
            List<string> nom = new List<string>();
            //Object MysqlConnection
            MySqlConnection connection;
            string server;  
            string database;       
            string uid;   
            string password;
                        
            server = "localhost";
            database = "gare_tetouan";
            uid = "root";
            password = "";
            
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            
            connection.Open();

            string query = "SELECT nom_societe FROM `societe`"; 
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.ExecuteNonQuery();
            MySqlDataReader reader = cmd.ExecuteReader();
           
              while (reader.Read()) // If you're expecting only one line, change this to if(reader.Read()).
                {
                    //nom = reader.GetString(1);

                    nom.Add(reader["nom_societe"].ToString());

                  }
         
            reader.Close();           
            connection.Close();

            return nom;
       }


et pour l'appeler :
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
           List<string> list = new List<string>();

            

                ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
                client.SelectSocieteCompleted += new EventHandler<SelectSocieteCompletedEventArgs>(client1_SelectSocieteCompleted);
                client.SelectSocieteAsync(list);
                
               // MessageBox.Show(list.Count.ToString());
           
        }

        private void client1_SelectSocieteCompleted(object obj, ServiceConsum.SelectSocieteCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                this.listpicker.ItemsSource = e.Result;
                //Message de succés 
                MessageBox.Show("ca marche !");
            }
            else {
                MessageBox.Show(e.Error.ToString());
            }
        }


Alors des idées
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de smahaneAAI
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 21 juin 2013 à 15:28
+3
Utile
Pardon j'ai oublié de vous poster mon code xaml :





    <!--LayoutRoot est la grille racine où tout le contenu de la page est placé-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--Titleanel contient le nom de l'application et le titre de la page-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MON APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Votre autocar" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
        <!--ContentPanel - placez tout contenu supplémentaire ici-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <toolkit:ListPicker Header="Choisir un Autocar" x:Name="listpicker" Margin="12,27,23,180" />
        </Grid>

    </Grid>
 
    



Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de smahaneAAI
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 15 juin 2013 à 14:50
0
Utile
me voilà encore
j'ai fais quelques modofocations après avoir compris un peu les choses
ma fonction de récuperation de mes données est correcte est marche bien(d'après le teste de mon webservice) et la voilà:
   public string SelectSociete(String nom)
        {
            
            //Object MysqlConnection
            MySqlConnection connection;
            string server;
            string database;
            string uid;
            string password;
            
            server = "localhost";
            database = "gare_tetouan";
            uid = "root";
            password = "";
            
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            
            connection.Open();
           
            string query = "SELECT nom_societe FROM `societe`";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader reader = cmd.ExecuteReader();
            
              while (reader.Read()) // If you're expecting only one line, change this to if(reader.Read()).
                {
                    //nom = reader.GetString(1);
                    nom = reader["nom_societe"].ToString();
                }
                
            
           // nom=(String)cmd.ExecuteScalar();
            //fermeture de la connection
            reader.Close();
            connection.Close();

            return nom;
        }


Mais quand je veux remplir mon textbox avec le resulta de cette requete ça marche pas
alors voilà le code de bouton qui rempli le textbox:
 private void button1_Click(object sender, RoutedEventArgs e)
        {
            string text= "";
            text = textBox2.Text;
            ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
            client.SelectSocieteAsync(text);
                 
        }


SVP SVP quelq1 peut me dire où est le probleme

et Merciiiiiiiiiii
Commenter la réponse de smahaneAAI
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 16 juin 2013 à 19:35
0
Utile
Salut ta fonction renvoie une chaine des caractere donc c'est normal que tu aies ce resultat;il faut que tu utilise une Collection soit List<String> à la place de String

 public List<string> SelectSociete(String nom)
        {

              List<string> lstnom=new List<string>(); 
            //Object MysqlConnection
            MySqlConnection connection;
            string server;
            string database;
            string uid;
            string password;
            
            server = "localhost";
            database = "gare_tetouan";
            uid = "root";
            password = "";
            
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            
            connection.Open();
           
            string query = "SELECT nom_societe FROM `societe`";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader reader = cmd.ExecuteReader();
            
              while (reader.Read()) // If you're expecting only one line, change this to if(reader.Read()).
                {
                    //nom = reader.GetString(1);
                    lstnom.Add(reader["nom_societe"].ToString());
                }
                
            
           // nom=(String)cmd.ExecuteScalar();
            //fermeture de la connection
            reader.Close();
            connection.Close();

            return lstnom;
        }


La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 16 juin 2013 à 19:38
0
Utile
Puis tu parcours

 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
           ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
foreach(String s in client.SelectSocieteAsync("xxxx"))
            ComboBox1.Items.Add(s);

        }


La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 17 juin 2013 à 20:40
0
Utile
Merci beaucouuup pour votre reponse
en fait oui vous avez raison j'aurai besoin d'une liste et c'est ce que j'ai decouvri par la suite alors j'ai fait presque même code que vous m'avez proposé,
et puis j'ai choisi de remplir une listpicker puisque j'aurai trop d données à afficher.


Mais pour le parcours j'ai fait presque même chose que votre proposition :

ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
            foreach (String s in client.SelectSocieteAsync("xxxx"))
                this.listpicker.Items.Add(s);


Mais ça marche pas un erreur me dit que je le "foreach" ne peut pas fonctionner pour des variables de type void

y'a t il une autre methode pour le parcours je suis perduuue
Commenter la réponse de smahaneAAI
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 17 juin 2013 à 23:48
0
Utile
Sinon j'ai pensé à passer une list comme paramètre de ma fonction qui rempli cette list par ce qu'elle recupère de ma bdd ,ensuite je rempli ma listpicker par cette list comme suit:
 List<string> list = new List<string>();
          ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
          client.SelectSocieteAsync(list);
          this.listpicker.Items.Add(list);


Mais ça donne une Exception donc ça marche pas

Je signale que je travail via un webService donc ma liste dans mon app mobile fait appel à une fonction SelectSocieteAsync() de type void et c'est cette dernière qui reference ma fonction qui contient la requete select dans le webservice wcf que j'ai créé
Commenter la réponse de smahaneAAI
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 18 juin 2013 à 00:23
0
Utile
Pardon, pour remplir la listpicker voilà la bonne façon:

 this.listpicker.ItemsSource = list;


Mais je l repete encooore ça ne marche pas comme si la fonction ne s'execute pas et qu'elle ne rempli pas la List<string> list

SOS une idée svp
Commenter la réponse de smahaneAAI
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 21 juin 2013 à 12:38
0
Utile
Mais regarde la methode elle renvoie une List qui est rempli par le la requête,je ne sais pas comment ça ne marche pas?
Verifie si le paramètre passé existe dans la BD

La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 21 juin 2013 à 12:47
0
Utile
1
Excuse moi mais ton code ne peut pas marcher vu que la liste est une collection sans element,ecoute lorsque l'on me en place un service cela est dedié pour des clients léger qui,eux nous auront qu'a récuperer les infos deja executé par le serveur
List<string> list = new List<string>();
          ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
          client.SelectSocieteAsync(list);
          this.listpicker.Items.Add(list);


Tu devrais avoir un truc du genre:
this.listpicker.ItemsSource=client.SelectSocieteAsync("xxxx");
//ou
List<string> list = new List<string>();
          ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
          list=client.SelectSocieteAsync(list);
          this.listpicker.ItemsSource=list;



La Science est Grande et Vaste partageons cette connaisance
normalemnt client.selectSocity est de type void , donc on ne peu pas laffecté a un variable de type striing nn ??

list=client.SelectSocieteAsync(list)

jai realiser le mm test mais il me donne une erreur :
Erreur 1 Impossible de convertir implicitement le type 'void' en 'System.Collections.Generic.List<string>'
Commenter la réponse de DevLama
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 21 juin 2013 à 17:53
0
Utile
Je vois utilise Visual Studio 2012? si c'est le Cas alors c'est normal car visual Studio 2012 lors de la création de la classe proxy il te génère des Methodes Asynchrones, alors il faut faire async et await
private async void button1_Click(Sender s,Object e){
    List<string> list = new List<string>();
          ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
          this.listpicker.ItemsSource=await  client.SelectSocieteAsync("xxx");
}


Parce que dans le serveur ou t'a deployé ton service la Methode SelectSociete renvoi une collection n'est-pas?

La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 22 juin 2013 à 01:33
0
Utile
je travail avec visual studio 2010 et sdk 7.1

et oui ma methode renvoie une collection plutot List<string>

mais je comprends pas qu'est ce que je vais mettre à la place des xxx que vous avez mis comme parametre des selectSocieteAsync() ??
Commenter la réponse de smahaneAAI
smahaneAAI 68 Messages postés jeudi 27 janvier 2011Date d'inscription 7 février 2014 Dernière intervention - 23 juin 2013 à 11:57
0
Utile
1
ok c bon ca marche Merciii
normalemnt client.selectSocity est de type void , donc on ne peu pas laffecté a un variable de type striing nn ??

list=client.SelectSocieteAsync(list)

jai realiser le mm test mais il me donne une erreur :
Erreur 1 Impossible de convertir implicitement le type 'void' en 'System.Collections.Generic.List<string>'
Commenter la réponse de smahaneAAI
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 23 juin 2013 à 17:20
0
Utile
Je vous en pries,developpeur .NET

La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.