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

Windows Forms Discussion :

[C#]Requêtes INSERT / UPDATE


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par défaut [C#]Requêtes INSERT / UPDATE
    Bonjour,

    Je travaille habituellement sur une base access mais je pense que mon problème se pose pour toutes les BDD.

    Lorsque je fais une requête insert ou update, et que je traite un champ texte, je dois nécessairement faire monChamp.Replace("'", "''") pour gérer les quotes dans le champ (un quote est remplacé par un double quote).
    Idem pour les double où je dois transformer la virgule en point.

    Existe-t-il une solution plus pratique car il m'est arrivé d'en oublier parfois.

    Merci

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Tout à fait, il y a une bien meilleure solution.
    Quand tu construis une requête sql, il te suffit de remplacer chaque endroit où tu voudrais mettre une valeur provenant de ton code par une un nom symbolique précédé du caractère @. Ensuite tu n'as plus qu'à utiliser la propriété Parameters de ton objet xxxCommand pour attribuer des valeurs à tes noms symboliques.

    Ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String strPrenom = "C'est mon prénom";
    String strNom = "C'est mon nom";
    xxxCommand myCommand = new xxxCommand("INSERT INTO maTable (nom, prenom) VALUES("+strNom.Replace("'", "''") +", "+strPrenom.Replace("'", "''")  +")");
    devient...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xxxCommand myCommand = new xxxCommand("INSERT INTO maTable (nom, prenom) VALUES(@nomPerso, @prenomPerso)");
    xxxCommand.Parameters.Add("@nomperso", "C'est mon nom");
    xxxCommand.Parameters.Add("@prenomPerso", "C'est mon prénom");
    Pour l'exemple, je n'ai pris que des String mais rien ne t'empêche de mettre directement d'autres objets qui représentent ton type sql (int, float, DateTime, ...)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par défaut
    Merci Goldar pour ta réponse.

    Je n'avais pas du tout pensé aux paramètres. Je me demande seulement comment il détecte que le paramètre est un double (et dans ce cas, il transforme la virgule en point) ou un string (et donc remplace le quote par un double quote).

    Mais il doit y avoir une ligne supplémentaire à rajouter pour spécifier le type.

    Je teste tout ça et je reviens te confirmer que c'est OK.

    Merci

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Ado.NET s'occupe de ça déjà, il n'y a pas besoin de se poser la question... Cependant, il arrive que des fois ça ne passe pas et dans ce cas, tu as une alternative qui te permet de spécifier le type de la donnée que tu veux faire passer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xxxCommand myCommand = new xxxCommand("INSERT INTO maTable (nom) VALUES(@nomPerso)");
    xxxParameter myParam = new xxxParameter("@nomPerso", SqlDbType.VarChar);
    myParam.Value = "C'est mon nom";
    myCommand.Parameters.Add(myParam);

  5. #5
    Membre expérimenté Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Par défaut
    Salut,

    C'est vrai, utiliser les paramètres est bien meilleur que gonfler le code des requêtes avec des Replace, d'ailleurs il n'y a pas que le problème de l'apostrophe, il se peut pour les nombre décimals, que le séparteur décimal système soit une virgule dans ce cas, si tu mets:
    Code VB .NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaCmd.CommandText="UPDATE MaTable SET MaDecimaleColonne=" & MaDecimaleValeur.ToString()
    'avec MaDecimaleValeur.ToString()=="45,65" t'auras :aie: .

  6. #6
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Par défaut
    Bonjour voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    OleDbCommand Command = new OleDbCommand("INSERT INTO client (nom, adresse, cp, ville, telephone, fax, email, site, id_type) VALUES(@nom,@adresse,@cp,@ville,@telephone,@fax,@email,@site,@id_type)", Connection);
                Command.Parameters.Add("@nom",tbNom.Text);
                Command.Parameters.Add("@adresse",tbAdresse.Text);
                Command.Parameters.Add("@cp",tbCP.Text);
                Command.Parameters.Add("@ville",tbVille.Text);
                Command.Parameters.Add("@telephone",tbTel.Text);
                Command.Parameters.Add("@fax",tbFax.Text);
                Command.Parameters.Add("@email",tbEmail.Text);
                Command.Parameters.Add("@site",tbSite.Text);
                Command.Parameters.Add("@id_type",cbType.Text);
    ça ne fonctionne pas

Discussions similaires

  1. Requête Insert / Update
    Par Loupita dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/07/2012, 12h15
  2. requéte insert /update/delete par dataAdapter
    Par magui_laurene dans le forum Accès aux données
    Réponses: 1
    Dernier message: 02/08/2007, 14h12
  3. Requête INSERT ou UPDATE avec saut de ligne
    Par CinErarY dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/05/2007, 04h38
  4. [ODBC] Faire une requête INSERT, DELETE, UPDATE
    Par avogadro dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2006, 11h35
  5. Réponses: 4
    Dernier message: 05/04/2005, 18h28

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