Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 12h04   #1
Expert Confirmé Sénior
 
Avatar de _skip
 
Homme
Développeur d'applications
Inscription : novembre 2005
Messages : 2 324
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 324
Points : 4 787
Points : 4 787
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 :
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.
_skip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 12h15   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
et ce ne serait pas plutot :
Code :
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 :
SELECT * FROM DEVISE WHERE DEVISE.CODE_DEVISE LIKE 'chf%'
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 12h31   #3
Expert Confirmé Sénior
 
Avatar de _skip
 
Homme
Développeur d'applications
Inscription : novembre 2005
Messages : 2 324
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 324
Points : 4 787
Points : 4 787
Non c'était correct,
La prise en charge des quote pour les strings ainsi que des caractères d'échappement est automatique.
_skip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 13h49   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
alors c'est un pb ADO.net
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 15h44   #5
Expert Confirmé Sénior
 
Avatar de _skip
 
Homme
Développeur d'applications
Inscription : novembre 2005
Messages : 2 324
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 324
Points : 4 787
Points : 4 787
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...
_skip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 17h14   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
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
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 18h16   #7
Expert Confirmé Sénior
 
Avatar de _skip
 
Homme
Développeur d'applications
Inscription : novembre 2005
Messages : 2 324
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 324
Points : 4 787
Points : 4 787
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.
_skip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 20h53   #8
Expert Confirmé Sénior
 
Avatar de _skip
 
Homme
Développeur d'applications
Inscription : novembre 2005
Messages : 2 324
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 324
Points : 4 787
Points : 4 787
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?
_skip est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h37.


 
 
 
 
Partenaires

Hébergement Web