Probléme de concaténation dans un string

Bonjour,

Je suis en train de développer un programme a des fins pédagogique

ce programme permet entre autre d'attribuer manuellement des droits a des utilisateurs sans passer directement par la base de donnée (MYSQL)

mais voila je n'arrive pas a concaténer ma requete ... c'est bête je sais mais je ne vois pas pourquoi ...

toutes les solutions que je trouve sur le net ne fonctionne pas

Voici le petit bout de code qui pause probléme :
sql = "UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = "+ element;
update.CommandText = sql; //variable contenant id_client

J'ai aussi essayé
sql = "UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = '{0}'", element;

j'ai déjà vérifié ma variable "element", celle ci me donne bien l'id du bon client coché dans une listview.

quand j'affiche via un MessageBox.Show(sql);
cela me donne "UPDATE client SET valid_client = '1' WHERE valid_client ="

il n'y a donc pas ma variable pris en compte ...
mes variables sont des strings.

Merci de votre aide désolé si certain d'entre vous trouves cela plus que basique

EDIT: Précision du langage dans la coloration syntaxique.
...

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour, messageBox n'est pas un outil de débugage.

    Pour ce code
            private void TestNadriel()
            {
                string element = "2";
    
                string sql = string.Format("UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = '{0}'", element);
            }


    Je mets un point d'arrêt à la ligne 3 (Click Droit / Point d'arrêt, ou F9)


    Quand je lance l'exécution, le programme s'arrête avant de lire cette instruction.

    Si je survole la variable avec ma souris, je voie qu'elle est null


    Si j'ai besoin de voir le contenue de cette variable tout au long de mon débugage je la mets en espion (Click Droit / Ajouter un Espion) qui viendra s'afficher sous la fenêtre de code


    Je n'ai plus qu'a exécuter pas à pas (avec F10 F11 ou ces flèches


    Et regarder comment ça évolue


    Dans ce débuggage la concaténation (avec le code de gravgun) c'est correctement déroulée.
    1. Contributeur
      'lut
      sql = "UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = '{0}'", element;
      C'est pas correct, à mon avis ça ne compile même pas. As-tu tenté avec
      String.Format
      ?
      sql = String.Format("UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = '{0}'", element);
      1. Oui pareil avec String.Format :s
        1. Contributeur
          Et es-tu sur que
          element
          n'est pas vide?
        2. element est théoriquement chargédes id_client provenant d'une requête SQL
          quand je met élément dans un MessageBox.show(); ça me retourne les id_clients
          après si vous avez un solutions pour vérifier plus en profondeur je suis preneur étant débutant en c# mes connaissance sont très limité ^^
      2. Merci pour le petit rappel au niveau du mode pas a pas et des espions j'en avais besoin ;)

        j'ai trouvé une solution

        etant donnée que ma requête ce situe dans un if verifiant une checkbox j'ai pu recupere la valeu id comme ceci
        if (_e.Checked)
                        {
        
                            string sql = _e.Text; // Récupération de id_client
                            
        
                            try
                            {
                                MySqlConnection conn = new MySqlConnection("Database='ticketingv3';server='127.0.0.1';User Id='root';pwd=''");
                                MySqlCommand update = conn.CreateCommand();
                                sql = String.Format("UPDATE client SET valid_client = '1' WHERE valid_client = '0' AND id_client = '{0}'", sql);
                                update.CommandText = sql; //variable contenant id_client
                                conn.Open();
                                listView1.Items[compteur].SubItems[2].Text = "true";
                                MySqlDataReader reader = update.ExecuteReader();
        
                                
        
        
                            }
                            catch
                            {
                                MessageBox.Show("Erreur");
                            }
                             
        
                        }
        
        

        ça fonctionne mais il reste un problème que je dois résoudre : cela ne fonctionne pas si l'utilisateur coche plusieurs case afin de validé un groupe de clients

        voici a quoi ressemble mon appli : les nombres a coté des checkBox sont bien les bon id client ^^