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

Connexion aux bases de données Firebird Discussion :

[ADO] Problème avec LIKE dans requête paramétrée


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut [ADO] Problème avec LIKE dans requête paramétrée
    Bonjour, j'ai une situation bizarre et bloquante :

    Voici une table toute simple :

    CREATE TABLE DEVISE (
    CODE_DEVISE Char(3) NOT NULL COLLATE ES_ES_CI_AI,
    NOM_DEVISE Varchar(20) NOT NULL COLLATE ES_ES_CI_AI,
    CONSTRAINT PK_DEVISE PRIMARY KEY (CODE_DEVISE)
    );


    En essayant de faire une requête paramétrée avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FbCommand fb = conex.CreateCommand();
     
    fb.CommandText = "SELECT * FROM DEVISE WHERE DEVISE.CODE_DEVISE LIKE @devise1";
    fb.Parameters.Add("@devise1", "chf%");
     
    FbDataReader reader = fb.ExecuteReader();
    On se prend un erreur de type "dynamic sql error -303 String truncation".
    Cela est du au fait que la colonne code_devise est de type CHAR(3) et que l'expression "chf%" en fait 4.
    Pourtant il s'agit d'un LIKE, donc on peut très bien imaginer que la formulation de l'expression à tester soit plus longue que 3.

    Si vous essayer d'utiliser des expressions comme "ch^s" ou "%chf" qui sont valides, la requête est tout de même rejetée.
    Je me demande si c'est un bug du provider ADO.net, ou si il s'agit de quelque chose de plus profond. Donc si quelqu'un pouvait essayer un preparedStatement avec java et me dire le résultat...

    Ou me donner une solution.
    Merci d'avance.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    et ce ne serait pas plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FbCommand fb = conex.CreateCommand();
     
    fb.CommandText = "SELECT * FROM DEVISE WHERE DEVISE.CODE_DEVISE LIKE @devise1";
    fb.Parameters.ADD("@devise1", "'chf%'");
     
    FbDataReader reader = fb.ExecuteReader();
    ?
    afin d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM DEVISE WHERE DEVISE.CODE_DEVISE LIKE 'chf%'

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Non c'était correct,
    La prise en charge des quote pour les strings ainsi que des caractères d'échappement est automatique.

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    alors c'est un pb ADO.net

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    J'ai posté un message sur le tracker de firebird ADO.net provider.
    Maintenant dieu sait quand est-ce que ce sera résolu sachant que c'est fait par des bénévoles qui ne doivent rien à personne.

    Les limites du open source...

  6. #6
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    Les limites du open source...
    tu as des chances de voir le bug corrigé, je connais des produits propriétaires qui vivent y compris avec des failles de sécurité très longtemps

    En plus du tracker tu peux joindre la liste http://www.firebirdsql.org/index.php...otnet-provider

    Ps tu l'a enregistré là : http://tracker.firebirdsql.org/ ? parce que je ne vois rien pour aujourd'hui dans le projet dotnet

  7. #7
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Non bien sûr tu as raison je devrai pas réagir comme ça.
    C'est juste que je bosse sur un application commerciale très importante pour mon entreprise et que ce genre de chose me fait parfois vraiment peur.

    J'ai posté un exemple sur
    http://tracker.firebirdsql.org/browse/DNET-124

    Est-ce que ce sera bien reconnu comme étant un bug? Je l'espère...

    PS: Au fait j'ai vu que tu avais posté au sujet d'une collation FR_FR_CI_AI, ça fait plaisir.

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ok voici la situation.
    Le problème a été reconnu, toutefois l'auteur du driver ne semble pas sûr de vouloir désactiver la vérification de la longueur des paramètres et laisser la base de donnée réagir sur l'éventuel faute.
    Je me demande ce que les autres providers ADO pour .Net font dans ce genre de situation...
    SI quelqu'un saurait me dire?

Discussions similaires

  1. Problème clause "like" dans une requête
    Par the-player777 dans le forum Requêtes et SQL.
    Réponses: 21
    Dernier message: 16/01/2008, 16h58
  2. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  3. Problème avec date dans requête
    Par alain94 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 07h49
  4. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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