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
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);
}
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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éé
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
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>'
<!--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>
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
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>'