Requête parémétrée ACCESS avec nom des paramètres "Microsoft.ACE.OLEDB.12.0"
Bonjour à tous,
j'adapte un projet Access vers VB.NET en conservant les données dans une base ACCDB.
Pour me connecter à cette base j'utilise le provider "Microsoft.ACE.OLEDB.12.0".
Jusque là tout va bien, tout est adapté correctement ... ou presque.
Un détail me chagrine, je me suis embêté à mettre des jolies requêtes paramétrées, j'ai donné de jolis noms aux paramètres ... mais le provider semble se moquer totalement des noms !
Il prend en compte l'ordre des paramètres.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Private connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""""mabase.accdb"""" "
Dim connexion As New System.Data.OleDb.OleDbConnection(connectionString)
connexion.Open()
Dim requete as string = "UPDATE environnements " & _
"SET nom = ParamNom, libelle = ParamLibelle" & _
"WHERE nom=ParamOldNom;"
Dim commande As System.Data.OleDb.OleDbCommand
commande = New system.Data.OleDb.OleDbCommand(requetes.qry_environnement, connexion)
commande.Parameters.AddWithValue("ParamNom", nom)
commande.Parameters.AddWithValue("ParamLibelle", libelle)
commande.Parameters.AddWithValue("ParamOldNom", oldNom)
commande.ExecuteNonQuery()
commande.Dispose()
connexion.Close() |
ça par exemple pas de soucis
Si je change l'ordre d'ajout des paramètres à la commande, la paramètre libellé de la requete va recevoir le nom, et le paramètre nom de la requêtre va recevoir le libelle :
Code:
1 2 3
| commande.Parameters.AddWithValue("ParamLibelle", libelle)
commande.Parameters.AddWithValue("ParamNom", nom)
commande.Parameters.AddWithValue("ParamOldNom", oldNom) |
J'ai testé avec d'autres syntaxe pour qu'il prenne en compte le nom des paramètres, et non leur ordre, mais sans succès :
Code:
1 2 3 4 5 6
| Dim requete as string = "UPDATE environnements " & _
"SET nom = @Nom, libelle = @Libelle" & _
"WHERE nom=@OldNom;"
commande.Parameters.AddWithValue("@Libelle", libelle)
commande.Parameters.AddWithValue("@Nom", nom)
commande.Parameters.AddWithValue("@OldNom", oldNom) |
L'effet est le même
Code:
1 2 3 4 5 6
| Dim requete as string = "UPDATE environnements " & _
"SET nom = ?Nom, libelle = ?Libelle" & _
"WHERE nom=?OldNom;"
commande.Parameters.AddWithValue("?Libelle", libelle)
commande.Parameters.AddWithValue("?Nom", nom)
commande.Parameters.AddWithValue("?OldNom", oldNom) |
Le "?" provoque une erreur de syntaxe ...
Est-ce que je suis condamné à respecter l'ordre des paramètres avec ce provider ?
Si non : quelle syntaxe utiliser ?
Si oui : un provider "plus intelligent" corrige-t-il ce défaut ?
Merci de votre aide, bien que ce soir un détail et que ça ne soit pas bloquant, je n'aime pas ce genre de petits défauts.