IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Utiliser la valeur d'une variable dans un requete SQL


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut Utiliser la valeur d'une variable dans un requete SQL
    Bonjour,

    Voila mon probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    String sql = "SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = " + lBInput.SelectedItem.ToString();
    da = new SqlDataAdapter(sql, con); // con est le nom de ma connection et dsl est mon DataSet
    cb = new SqlCommandBuilder(da);
    da.Fill(dsl, "XMLFilesProduce"); // L'erreur est a cette ligne
    J'aimerais que lBInput.SelectedItem.ToString() (Qui est une ListBox) il le considere comme quelquechose qui varie.
    J'ai l'impression qu'il le sait mais j'obtient toujours l'erreur suivante :
    Invalid column name [Nom de la variable selectionee dans la ListBox]
    Merci d'avance,

    Mathieu

    EDIT : En fait il se rend bien compte que c'est une variable donc pas de soucis mais meme quand je met quelquechose de fixe, j'ai la meme erreur alors qu'avant et en faite pour la valeur fixe je n'avais pas mis les ' ' !!! Du coup je pense que il attend ces fameuses ' ' pour la valeur de la variable ...
    Du coup je ne sais pas du tout comment faire ...

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Utilise les requêtes paramétrées dans tes requêtes, tu y gagneras en sécurité, lisibilité et rapidité.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Merci cela m'aide beaucoup.

    Voila donc ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SqlCommand sql = new SqlCommand("INSERT INTO XMLFilesProduce (FileName) SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = '@lBInput'", form1.con);
    sql.Parameters.Add(new SqlParameter("@lBInput", SqlDbType.VarChar,400));
    sql.Parameters["@lBInput"].Value = lBInput.SelectedItem.ToString();
    sql.ExecuteNonQuery();
    La compilation se passe bien, pas de probleme mais rien ne s'ajoute a ma table XMLFilesProduce ... Pourtant il existe bien au moins une ligne repondant a la requete !

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Citation Envoyé par poupou63 Voir le message
    Merci cela m'aide beaucoup.

    Voila donc ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SqlCommand sql = new SqlCommand("INSERT INTO XMLFilesProduce (FileName) SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = '@lBInput'", form1.con);
    sql.Parameters.Add(new SqlParameter("@lBInput", SqlDbType.VarChar,400));
    sql.Parameters["@lBInput"].Value = lBInput.SelectedItem.ToString();
    sql.ExecuteNonQuery();
    La compilation se passe bien, pas de probleme mais rien ne s'ajoute a ma table XMLFilesProduce ... Pourtant il existe bien au moins une ligne repondant a la requete !
    Attention, il reste un paramètre en dur dans ta requête : "Storage='exported'".
    Sinon, pour ton problème à proprement parler, la syntaxe de ta requête est quand même... particulière.
    Normalement, en INSERT, ta requête adopte la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO MATABLE (CHAMP1) VALUES (VALEURCHAMP1)
    Dans ton code, on en est loin...
    Sinon, es-tu sûr que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = '@lBInput'
    (en remplaçant les paramètres par des valeurs en dur) renvoie quelque chose ?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    On ne quote pas un paramètre! C'est SQL qui s'en charge comme un grand!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand sql = new SqlCommand("INSERT INTO XMLFilesProduce (FileName) SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = @lBInput", form1.con);

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    @Nathanael Marchand : bien vu. J'avais pas fais gaffe

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Ahah effectivement ca va mieux.
    Enfin j'ai pu cette erreur mais une autre ^^

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SqlCommand sql = new SqlCommand("INSERT INTO XMLFilesProduce (FileName) SELECT DISTINCT FileName FROM Variables WHERE Storage='exported' AND Name = @lBInput.SelectedItem.ToString()", form1.con);
    sql.Parameters.Add(new SqlParameter("@lBInput", SqlDbType.VarChar,400));
    sql.Parameters["@lBInput"].Value = lBInput.SelectedItem.ToString();
    sql.ExecuteNonQuery(); // L'erreur est la !
    Voila l'erreur :
    Cannot call methods on varchar.
    EDIT : I'm a boulet ! J'ai mis @lBInput.SelectedItem.ToChar() au lieu de @lBInput ...

  8. #8
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Qu'est ce que c'est que ce "@lBInput.SelectedItem.ToChar()" dans ta requête ???? Tu crois que le SGBD arrive à retrouver un paramètre qui son nomme comme ça ???
    Dans le suite de ton code tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.Parameters["@lBInput"].Value = lBInput.SelectedItem.ToString();
    , donc dans ta requête tu utilises le MEME NOM DE PARAMETRE !

    Arf... pas vu le edit...
    Je suis sûre que ç a marche maintenant
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Oui d'ou mon Edit

    J'ai une petite question :
    Quand on execute une commande avec ExecuteNonQuery() cela prend effet directement ou alors juste quand on utilise connection.Close() ?
    Car ca me fait n'importe quoi et j'ai l'impression que quand je ferme et que je reexecute mon programme il prend enfin en compte ma derniere requete...
    Je vais devenir fou !

  10. #10
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    ExecuteNonQuery ordonne au programme d'exécuter la "non requête" comme son nom l'indique. Donc elle se fait aussitôt.

    si tu as des comportements bizarres, il doit y avoir des erreurs de codage dans ton appli.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser une valeur d'une variable dans une Macro
    Par ca_adrien dans le forum Macro
    Réponses: 7
    Dernier message: 01/08/2013, 14h14
  2. passer une variable dans ma requete SQL
    Par poulette3000 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/04/2008, 13h50
  3. passer une variable dans ma requete SQL
    Par poulette3000 dans le forum C#
    Réponses: 0
    Dernier message: 16/04/2008, 19h24
  4. Réponses: 2
    Dernier message: 08/06/2006, 13h48
  5. Utilise la valeur d'une textbox dans une requête sql
    Par podidoo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/03/2006, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo