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
On se prend un erreur de type "dynamic sql error -303 String truncation".
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();
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.
Partager