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 :

insertion d'élément db avec quotes


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 59
    Points : 44
    Points
    44
    Par défaut insertion d'élément db avec quotes
    Bonjour,
    j'ai un souci pour faire passer une requête entre VB.NET et Access
    en fait, j'ai un caractère quote dans le texte que je dois insérer.
    Il est impossible de modifier le texte donc la quote doit impérativement rester.

    bref ca me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = "Insert into synthese(nom_client,prenom_client,element) values ('" & myReader(0).ToString & "','" & myReader(1).ToString & "','" & myReader(2) & "')"
    j'ai essayé avec des doubles guillemets à la place de la quote mais ca ne marche pas mieux

    y-a-til une fonction qui transforme tout cela ?
    ou une technique pour inserer le champs contenant une quote ?

    Merci d'avance

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    Même si ca en répond pas vraiment à ta question initiale, personnelement je passerais via une requete paramétrée. exemple: http://faqvbnet.developpez.com/?page...onet_execparam

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par AP Voir le message
    Même si ca en répond pas vraiment à ta question initiale, personnelement je passerais via une requete paramétrée. exemple: http://faqvbnet.developpez.com/?page...onet_execparam
    Au contraire, ton approche répond exactement à la problématique initiale

  4. #4
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Citation Envoyé par hyipicai Voir le message
    Bonjour,
    j'ai un souci pour faire passer une requête entre VB.NET et Access
    en fait, j'ai un caractère quote dans le texte que je dois insérer.
    Il est impossible de modifier le texte donc la quote doit impérativement rester.

    bref ca me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = "Insert into synthese(nom_client,prenom_client,element) values ('" & myReader(0).ToString & "','" & myReader(1).ToString & "','" & myReader(2) & "')"
    j'ai essayé avec des doubles guillemets à la place de la quote mais ca ne marche pas mieux

    y-a-til une fonction qui transforme tout cela ?
    ou une technique pour inserer le champs contenant une quote ?

    Merci d'avance
    sinon tu peux procéder comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = "Insert into synthese(nom_client,prenom_client,element) values ('" & Replace(myReader(0).ToString, "'", "''") & "','" & Replace(myReader(1).ToString, "'", "''") & "','" & Replace(myReader(2), "'", "''") & "')"
    et ça marche

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par JauB Voir le message
    sinon tu peux procéder comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = "Insert into synthese(nom_client,prenom_client,element) values ('" & Replace(myReader(0).ToString, "'", "''") & "','" & Replace(myReader(1).ToString, "'", "''") & "','" & Replace(myReader(2), "'", "''") & "')"
    et ça marche
    Pitié non ! Evitons ce genre d'horreurs...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Pitié non ! Evitons ce genre d'horreurs...
    berk t'as raison, d'ailleurs ce genre d'utilisation du sql devrait etre complétement banni a cause de la faille lié au SQL injection

  7. #7
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Citation Envoyé par iron182 Voir le message
    berk t'as raison, d'ailleurs ce genre d'utilisation du sql devrait etre complétement banni a cause de la faille lié au SQL injection
    ses données sont apparement extraites à partir d'une base de données et qu'il veut les réinsérer peut eêtre dans une autre base ou table donc je ne vois pas le risque des injections SQL, sinon ce dernier point reste un élément au quel il faut attention.

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par JauB Voir le message
    ses données sont apparement extraites à partir d'une base de données et qu'il veut les réinsérer peut eêtre dans une autre base ou table donc je ne vois pas le risque des injections SQL, sinon ce dernier point reste un élément au quel il faut attention.
    Je n'ai jamais parlé de SQL injection. L'approche utilisant le replace est ignoble dans tous les cas...
    Alors pour ton information (extrait d'une précédente discussion) :
    Citation Envoyé par SaumonAgile
    Premier point s'il est nécessaire de le rappeler, ça évite les problèmes de DateTime. Le IDataParameter est de type DateTime, le champ dans la base est de type DateTime, la valeur qu'on veut lui passer est de type DateTime, ça ne vous a jamais choqué de devoir convertir vos valeurs en string dans vos requêtes (que ce soit un DateTime ou autre chose) ?

    Deuxième point : Une fois votre requête écrite avec les paramètres, elle ne change plus quelle que soit la valeur que vous mettrez ensuite dans le paramètre. Clin d'oeil à tous ceux qui concatènent leur requête INSERT dans une boucle.

    Troisième point (lié au deuxième) : les SGBD standards mettent en cache les requêtes, une requête paramétrée est enregistrée efficacement et optimisée dans le cache, les requêtes construites en dur polluent le cache.

    Quatrième point : Le fait d'utiliser des paramètres SQL vous met définitivement à l'abri des erreurs (trop fréquentes) de "J'ai un apostrophe dans ma chaine, ça fait tout casser ma requête Ouin/Ouin/Please/Up/Résolu/Boulet".

    Cinquième point : vous vous mettez à l'abri des SQL Injections, pour tous ceux d'entre vous qui concatènent directement un TextBox dans leur requête.

    Sixième point : En utilisant concaténant vos valeurs dans la requête, vous introduisez une source d'erreur, une couche d'illisibilité supplémentaire.

    Septième point : En concaténant la requête, vous passez à côté de toute la belle gestion des erreurs du framework en abandonnant une hypothétique invalidecastexception en débogage au 'profit' d'une espèce d'erreur SQL générique qui ne vous donne aux mieux qu'une appréciation minable de la source de l'erreur.

    Voila.

Discussions similaires

  1. [XL-2007] Insertion d'une ligne avec copie de certains éléments
    Par Zentin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/07/2014, 17h48
  2. pb Insertion d'éléments dans une table avec mySql++
    Par donkeyquote dans le forum C++
    Réponses: 1
    Dernier message: 24/02/2008, 00h39
  3. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  4. [DOM] Insertion d'éléments avec DOM
    Par TheReturnOfMuton dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 27/06/2006, 15h33
  5. Insertion d'éléments multimédia avec MySQL
    Par maha83 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/02/2006, 20h00

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