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 :
ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : DATE
Je créé ma requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
String req = "INSERT INTO Projet(Id_Projet, DateDebut, DatFin) VALUES (:Id, :DateDebut, :DateFin)"
Et j'utilise un IDBParametersBuilder :
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);
Enfin, je lance ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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