Bonjour,
J'ai passé la matinée à débugué un bout de code incluant une requête paramêtrée, en fait je me retrouvais avec l'erreur :
Je créé ma requete :ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : DATE
Et j'utilise un IDBParametersBuilder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2String req = "INSERT INTO Projet(Id_Projet, DateDebut, DatFin) VALUES (:Id, :DateDebut, :DateFin)"
Enfin, je lance ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 IDbParametersBuilder builder = CreateDbParametersBuilder(); builder.Create().Name("DateDebut").Type(DbType.Date).Value(p.DateDebut); builder.Create().Name("DateFin").Type(DbType.Date).Value(p.DateFin); builder.Create().Name("Id").Type(DbType.Int64).Value(p.Id);
J'ai trouvé pourquoi j'avais l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AdoTemplate.ExecuteNonQuery(CommandType.Text, req, builder.GetParameters());
L'ordre dans lequel j'ai fait mes builder.Create() ne correspond pas avec l'ordre dans lequel figurent les valeurs paramétrées de la requête.
Et là, j'en viens à ma question :
A quoi ça sert de donner un nom aux paramètres, et pas un signe particulier genre : "insert into t(p1,p2) values(?,?)" ?
Ensuite, seconde question, moins rhétorique:
Existe-il un moyen de construire une requête paramètrée en ayant une liste associative -- une vraie, qui sert à quelquechose -- pour stocker les valeurs ?
Car, si j'ai simplifié le code, en réalité, les builder.Create() sont appellés dans des méthodes et je ne peut pas contrôler l'ordre dans lequel ils sont fait.
Merci d'avance pour vos lumières![]()
Partager