none
initialiser 2 variables et les affecter par les valeurs obtenues par une requête (d'une bdd MySql) avec c# RRS feed

  • Question

  • Bonjour,
    J'ai une bdd MySql... Je fais mes requêtes SQL avec c#

    dans la table,tbl_pays, de ma bdd il y a 2 champs :
    1er champ : id (type 'varchar(5)'auto_increment, index (PRIMARY) donc unique)
    2e champ : country (type : 'text')

    Il y a plusieurs enregistrements/ligne dans cette table

    Ce que je vais faire,

    Chaque fois que je connecte à la bdd, par la requête, je vais obtenir les valeurs de 2 champs, "id" et "country", du 1ere enregistrement/ 1ere ligne.
    SELECT id, country FROM tbl_pays LIMIT 1;
    
    Avant de cela, je vais/veux initialiser mes variables :
    string vId;
    string vCountry;
    
    
    je veux affecter ces variables par les valeurs obtenues... Je n'arrive pas affecter mes variables pour y utiliser!

    voici mon code :
    //initialiser mes variables
    // il faut les initialiser pour ne pas garder toujours le même valeur...
    string vId;
    string vCountry;
    // connection bdd MySql pour recuperer code unique à envoyer l'utilisateur
                    string connBDD = "server=###.##.#.#;user=#######;database=toto;port=3306;password=###################;";
                    MySqlConnection connBDD = new MySqlConnection(connBDD);
     
                    connBDD.Open();
     
     
                    //DEV TEST
                    // selectionné le 1er engregistrement
                    string sqlBDD = "SELECT id, country FROM tbl_pays LIMIT 1";
     
     
                    MySqlCommand cmdBDD = new MySqlCommand(sqlBDD, connBDD);
     
     
    		//***---------????????? comment je peux affecter mes variables  en C# ???
    				////////en php : ---------------------------- debut--------------------
     
    					
    					// while($row=mysql_fetch_row($sqlBDD))
    					// {
    					// 	$vId=$row[0];
    					// 	$vCountry=$row[1];
     
    					// }	
     
    				//////////en php : ---------------------------- fin--------------------
     
     
    		cmdBDD.ExecuteNonQuery();
    		// je ferme la connexion
                    connBDD.Close();
    

    Comment je dois faire ? vous pouvez m'aider ?

    merci

    lundi 17 octobre 2011 13:53

Réponses

  • Rebonjour,

     

    par contre si je met mon 2e variable dans la boucle while, j'imagine que cela va marcher :

    Je vais tester.

    Est ce que c'est une bonne idée ? je ne sais pas mais je vais tester et je vais revenir...

     

    Merci pour votre aide

    				string sqlBDD = "SELECT id FROM tbl_pays LIMIT 1"; // champs id --> type 'varchar(5)'
    
    					 MySqlCommand cmdBDD = new MySqlCommand(sqlBDD, connBDD);
    					MySqlDataReader myReaderBDD;
    
    					myReaderBDD = cmdBDD.ExecuteReader();
    
    					string vChiffre; //vChiffre en dehors de boucle while.
    
    
    					 // Always call Read before accessing data.
    					while (myReaderBDD.Read()) 
    						{
    
    						vChiffre = myReaderBDD.GetString(0); //// ligne 26
    						mTestPageState.CodeMySql = vChiffre; 
    						}
    					
    					// always call Close when done reading.
    					myReaderBDD.Close();
    					// Close the connection when done with it.
    					connBDD.Close();
    
    				
    					
    				 }
    			else
    				{
    					mTestPageState.CodeMySql = ""; // si le code n'est pas bon, vider le CodeMySql
    				}
    			
    			SavePageState();
    

    il n'y a pas d'alerte dans "visuel Web Develpper 2010 Express"... Je vais voir si tout va bien

    • Marqué comme réponse aspkiddy lundi 17 octobre 2011 20:15
    lundi 17 octobre 2011 19:36

Toutes les réponses

  • Bonjour,

    Voir l'exemple de code C# sur cette page : http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqldatareader.html

    ExecuteNonQuery permet d'exécuter une commande qui ne renvoie pas de données. ExecuteReader permet de retourner un objet MySqlDataReader qui va permettre d'accéder aux lignes/colonnes retournées par la requête.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    lundi 17 octobre 2011 14:31
    Modérateur
  • Bonjour Patrice Scribe,

    Merci pour votre explication et l'exemple.

    J'ai fait ma requête seulement "id" pour le moment...
    j'ai affecté ma variable "vChiffre" à la ligne 26 (voir ci-dessous)

    Ensuite je vais affecter ma nouvelle variable "CodeReductionMySql" avec la valeur de "vChiffre" pour utiliser cette valeur dans un autre écran.

    Mais je n'arrive pas parce que dans "visuel Web Develpper 2010 Express", à la ligne 34, sur la variable "vChiffre", j'ai le message : "Le nom 'vChiffre' n'existe pas dans le contexte actuel"

    Comment je peux faire cela ?

      private void SetPageState()
            {
    			mTestPageState.utilisateurCode = ConvertString(utilisateurCodeTextBox.Text); 
    			if (((utilisateurCodeTextBox.Text) == "toto") || ((utilisateurCodeTextBox.Text) == "roro")) 
    				{
    				
    				// connection bdd MySql pour recuperer code unique à envoyer l'utilisateur
    					string connBDD = "server=###.##.#.#;user=#######;database=toto;port=3306;password=###################;";
    					MySqlConnection connBDD = new MySqlConnection(connBDD);
    
    					connBDD.Open();
    
    
    
    					string sqlBDD = "SELECT id FROM tbl_pays LIMIT 1"; // champs id --> type 'varchar(5)'
    
    					 MySqlCommand cmdBDD = new MySqlCommand(sqlBDD, connBDD);
    					MySqlDataReader myReaderBDD;
    
    					myReaderBDD = cmdBDD.ExecuteReader();
    
    					 // Always call Read before accessing data.
    					while (myReaderBDD.Read()) 
    						{
    						string vChiffre;
    						vChiffre = myReaderBDD.GetString(0); //// ligne 26
    						}
    					
    					// always call Close when done reading.
    					myReaderBDD.Close();
    					// Close the connection when done with it.
    					connBDD.Close();
    
    					mTestPageState.CodeMySql = vChiffre; //ligne 34
    					////// message visuel Web Develpper 2010 Express : Le nom 'vChiffre' n'existe pas dans le contexte actuel
    					
    				 }
    			else
    				{
    					mTestPageState.CodeMySql = ""; // si le code n'est pas bon, vider le CodeMySql
    				}
    			
    			SavePageState();
            }
    public struct TestPageState
    	{
    	public string utilisateurCode;
    	public string CodeMySql;
    	}
    
    

    lundi 17 octobre 2011 18:36
  • Bonjour,

    Sortez la déclaration de la variable vChiffre en dehors de votre boucle while.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    lundi 17 octobre 2011 18:45
    Modérateur
  • Comment je peux la sortir en dehors de while ?

    en fait avec le code suivant, j'ai un autre alerte : :Utilisation d'une variable locale non assignée 'vChffre'!!!

    //(....)
    string sqlBDD = "SELECT id FROM tbl_pays LIMIT 1"; // champs id --> type 'varchar(5)'
    
    					 MySqlCommand cmdBDD = new MySqlCommand(sqlBDD, connBDD);
    					MySqlDataReader myReaderBDD;
    
    					myReaderBDD = cmdBDD.ExecuteReader();
    
    					string vChiffre; //vChiffre en dehors de boucle while.
    
    
    					 // Always call Read before accessing data.
    					while (myReaderBDD.Read()) 
    						{
    
    						vChiffre = myReaderBDD.GetString(0); //// ligne 26
    						}
    					
    					// always call Close when done reading.
    					myReaderBDD.Close();
    					// Close the connection when done with it.
    					connBDD.Close();
    
    					mTestPageState.CodeMySql = vChiffre; //ligne 34
    					////// message visuel Web Develpper 2010 Express :Utilisation d'une variable locale non assignée 'vChffre'
    					
    				 }
    			else
    				{
    					mTestPageState.CodeMySql = ""; // si le code n'est pas bon, vider le CodeMySql
    				}
    			
    			SavePageState();
    


    lundi 17 octobre 2011 19:19
  • Rebonjour,

     

    par contre si je met mon 2e variable dans la boucle while, j'imagine que cela va marcher :

    Je vais tester.

    Est ce que c'est une bonne idée ? je ne sais pas mais je vais tester et je vais revenir...

     

    Merci pour votre aide

    				string sqlBDD = "SELECT id FROM tbl_pays LIMIT 1"; // champs id --> type 'varchar(5)'
    
    					 MySqlCommand cmdBDD = new MySqlCommand(sqlBDD, connBDD);
    					MySqlDataReader myReaderBDD;
    
    					myReaderBDD = cmdBDD.ExecuteReader();
    
    					string vChiffre; //vChiffre en dehors de boucle while.
    
    
    					 // Always call Read before accessing data.
    					while (myReaderBDD.Read()) 
    						{
    
    						vChiffre = myReaderBDD.GetString(0); //// ligne 26
    						mTestPageState.CodeMySql = vChiffre; 
    						}
    					
    					// always call Close when done reading.
    					myReaderBDD.Close();
    					// Close the connection when done with it.
    					connBDD.Close();
    
    				
    					
    				 }
    			else
    				{
    					mTestPageState.CodeMySql = ""; // si le code n'est pas bon, vider le CodeMySql
    				}
    			
    			SavePageState();
    

    il n'y a pas d'alerte dans "visuel Web Develpper 2010 Express"... Je vais voir si tout va bien

    • Marqué comme réponse aspkiddy lundi 17 octobre 2011 20:15
    lundi 17 octobre 2011 19:36
  • Merci Gilles TOURREAU,

     

    Ça marche lorsque  je mets mon 2e variable dans la boucle while :

    vChiffre = myReaderBDD.GetString(0); //// ligne 26
    mTestPageState.CodeMySql = vChiffre; 
    


    Merci pour vos aides...

     

    Bonne soirée

    lundi 17 octobre 2011 20:17