[Spring] Requetes parametrées
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 :
Citation:
ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : DATE
Je créé ma requete :
Code:
1 2
|
String req = "INSERT INTO Projet(Id_Projet, DateDebut, DatFin) VALUES (:Id, :DateDebut, :DateFin)" |
Et j'utilise un IDBParametersBuilder :
Code:
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); |
Enfin, je lance ma requête :
Code:
1 2
|
AdoTemplate.ExecuteNonQuery(CommandType.Text, req, builder.GetParameters()); |
J'ai trouvé pourquoi j'avais l'erreur :
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 :)