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 :

Requete parametrée dans BdD


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut Requete parametrée dans BdD
    Bonjour,
    je programme en C# sous visual 2008.
    j'essaye d'utiliser les requetes parametrées afin de supprimer une ligne de ma base de données.
    mais ca ne fonctionne pas quand j'ai des apostrophes dans mes parametres.
    Question:
    - les requetes parametrées ne sont t-elle pas sensées gerer les apostrophes ?
    dans le cas contraire ya t'il une autres alternative.

    PS: mon code fonctionne bien quand ya pas d'apostrophe dans mes paramtres.
    j'espere avoir été assez clair.
    Merci !!

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    si tes parametres en des apostrophes, je pense qu'il faut juste les remplacer par double apostrophe avant de les traiter.

    par exemple, dans un objet command, avant d'en ajouter un param, on donne à ce dernier une valeur dont l'apostrophe a été remplacé par double apostrophe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SqlCommand cmd = new SqlCommand();
    .......
    SqlParameter param = new SqlParameter();
    param.Value = Valeur.Replace("'", "''");
    cmd.Parameters.Add(param);

    Bonne courage

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par kabil.cpp Voir le message
    - les requetes parametrées ne sont t-elle pas sensées gerer les apostrophes ?
    Hello,

    en effet, ça doit le gérer. Quel est le fournisseur de données que tu utilises, avec quel SGBD ?

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Guulh Voir le message
    en effet, ça doit le gérer. Quel est le fournisseur de données que tu utilises, avec quel SGBD ?
    +1

    Et eventuellement, un petit bout de code pour aller avec ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut
    ca ne marche tjr pas, mais quans j'essaye de supprimer la meme ligne apres avoir mis des chaine sans apostrophes ca marche.
    donc le soucis est bien dans les apostrophes.
    ya t'il une erreur dans mon code qui fait que ma requete parametrée ne prend pas en charge les apostrophes?

    Citation:
    Envoyé par Guulh
    en effet, ça doit le gérer. Quel est le fournisseur de données que tu utilises, avec quel SGBD ?

    +1

    Et eventuellement, un petit bout de code pour aller avec ?
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    chaineConnexion = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", cheminBdD);
    MyConnection = new OleDbConnection(chaineConnexion);
    MyConnection.Open();
    //.....
    //.....
     
    IDbCommand requete = MyConnection.CreateCommand();
    requete.CommandText = @"DELETE FROM [" + SelectedTable + "] WHERE ";
     
    List<IDbDataParameter> _param = new List<IDbDataParameter>();
    for (int i = 0; i < SelectedCell.Length; i++)
         {
           _param.Add(requete.CreateParameter());
           _param[i].ParameterName = "@" + i;
           if (TypeColonne[i] == "String") _param[i].DbType = DbType.String;
           else if (TypeColonne[i] == "Integer") _param[i].DbType = DbType.Int32;
           else if (TypeColonne[i] == "Boolean") _param[i].DbType = DbType.Boolean;                 
           _param[i].Value = SelectedCell[i].Replace("'","''");
           requete.CommandText += "[" + ColName[i] + "] = @" + i;
           if (i != SelectedCell.Length - 1)
              requete.CommandText += " AND ";
         }
      requete.CommandText += ";";
    foreach (IDbDataParameter p in _param)
               requete.Parameters.Add(p);
     
               requete.ExecuteNonQuery();
    ma requete essemble a ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM [mytable] WHERE [col1] = @0 AND [col2] = @1 AND [col3] = @2 AND [col4] = @3;

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    - les requetes parametrées ne sont t-elle pas sensées gerer les apostrophes ?
    C'est aussi ce qu'il me semble, et l'instruction _param[i].Value = SelectedCell[i].Replace("'","''"); est inutile, voire nuisible.

    Pourquoi utiliser des IdbDataParameter/IDbCommand/DbType et non des OleDbParameter/OleDbCommand/OleDbType?

  7. #7
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Pourquoi utiliser des IdbDataParameter/IDbCommand et non des OleDbDataPaerameter/OleDbCommand ?
    Pour programmer pour une interface, et pas pour une implémentation, c'est plutot une bonne pratique

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  8. #8
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut doublé l'apostrophe
    Pour passer un ' dans une requête SQL il faut que tu doubles l'apostrophe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE(texte) values('salut l''ami');
    Se sont 2 apostrophes collées et non des guillemets !

  9. #9
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par kabil.cpp Voir le message
    les requetes parametrées ne sont t-elle pas sensées gerer les apostrophes ?
    Ca dépend du type de fournisseur je pense. OleDb permet d'accéder à différents moteurs (Access, SQL Server, MySql, Oracle, ...) et je pense qu'à ce stade le fournisseur n'est pas capable de gérer ce genre de choses car il ne sait pas quel est le moteur visé précisément. Par exemple sous SQL Server il faut doubler les apostrophes dans une chaîne car l'apostrophe est le délimiteur des chaînes, mais ce n'est plus du tout souhaitable si le délimiteur est le guillemet (ce qui est très probablement le cas de certains moteurs je pense). Un fournisseur générique ne va pas s'amuser à modifier la commande à ce stade.

    Seuls les fournisseurs orientés pour un moteur en particulier permettent de gérer ça à mon avis (tout ce qui se trouve dans System.Data.SqlClient pour SQL Server par exemple). Si on connait le moteur ciblé on peut alors adapter la commande en fonction. Mais n'étant pas expert de ce domaine, je garde mon joker au cas où ^^

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

Discussions similaires

  1. [MySQL] Requete special dans bdd
    Par azorol dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 22/02/2014, 17h40
  2. Requete parametrée dans un combo.
    Par gicquairea dans le forum WinDev
    Réponses: 11
    Dernier message: 08/12/2007, 07h35
  3. Réponses: 20
    Dernier message: 21/11/2007, 13h42
  4. Réponses: 2
    Dernier message: 20/06/2005, 14h57
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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