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

Résolu
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
- 14 juin 2013 à 00:41
 oui - 15 oct. 2020 à 13:43
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

14 réponses

smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
15 juin 2013 à 14:50
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
1
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
16 juin 2013 à 19:35
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
1
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
16 juin 2013 à 19:38
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
1
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
17 juin 2013 à 20:40
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
1

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

Posez votre question
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
17 juin 2013 à 23:48
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éé
1
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
18 juin 2013 à 00:23
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
1
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
21 juin 2013 à 12:38
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
1
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
21 juin 2013 à 12:47
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
1
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>'
0
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
21 juin 2013 à 15:26
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
1
vous avez fait de ma vie un reve
0
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
21 juin 2013 à 15:28
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>
 
    



1
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
21 juin 2013 à 17:53
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
0
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
22 juin 2013 à 01:33
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() ??
0
smahaneAAI
Messages postés
68
Date d'inscription
jeudi 27 janvier 2011
Statut
Membre
Dernière intervention
7 février 2014
10
23 juin 2013 à 11:57
ok c bon ca marche Merciii
0
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>'
0
DevLama
Messages postés
356
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
18 novembre 2021
10
23 juin 2013 à 17:20
Je vous en pries,developpeur .NET

La Science est Grande et Vaste partageons cette connaisance
0