OleDbCommand erreur de syntaxe avec UPDATE

Résolu
MGD Software Messages postés 193 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 - 3 août 2019 à 16:55
MGD Software Messages postés 193 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 - 7 août 2019 à 19:09
Bonjour,

Je me trouve confronté à une erreur curieuse dont je n'arrive pas à comprendre la cause.

J'ai une connexion OleDbConnection à une base Access, nommée Cnx.
Tout se passe bien (jusqu'à présent) avec les requêtes SELECT, DELETE, INSERT INTO.
Par contre, avec ma première (et seule pour l'instant dans cette appli) requête UPDATE, je n'arrive pas à exécuter une requête simple avec ma OleDbCommand, alors que la même requête s'exécute très bien sous Access.

Texte de la requête :
UPDATE T_Statuts SET Password='azerty' WHERE Statut_ID=1

Dans Access, en créant une requête et en collant ce texte, l'exécution de la requête m'informe simplement que je vais mettre à jour une ligne, et la modif est effective.

Dans Visual Studio, le code suivant :
string Sql = "UPDATE T_Statuts SET Password='azerty' WHERE Statut_ID=1";
OleDbCommand Cmd = new OleDbCommand(Sql, Cnx);
Cmd.ExecuteNonQuery();
provoque une erreur "Erreur de syntaxe dans l'instruction UPDATE".

Si je mets un point d'arrêt dans la ligne de l’exécution, la propriété Cmd.CommandText me renvoie bien exactement le texte de la requête. Donc ce dernier a bien été passé.

Pourtant, j'ai plusieurs autres applis qui utilisent des requêtes UPDATE, avec le même type de connexion et la même syntaxe (avec cependant l'utilisation de paramètres plutôt que l'utilisation des valeurs directes), et qui ne posent pas de problème.

J'ai commencé la présente requête avec des paramètres, mais devant l'échec j'ai mis des valeurs en "dur" et l'erreur est toujours là. Code initial :
Sql = "UPDATE T_Statuts SET Password=@Pwd WHERE Statut_ID=@ID";
Cmd = new OleDbCommand(Sql, Cnx);
Cmd.Parameters.AddWithValue("ID", CatID);
Cmd.Parameters.AddWithValue("Pwd", NewPwd);
Cmd.ExecuteNonQuery();


Je ne comprends pas ce qui peut provoquer une erreur de syntaxe, alors que la même syntaxe passe dans Access.

Quelqu'un aurait une idée ? Je suis sec.
A voir également:

2 réponses

Whismeril Messages postés 18605 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 septembre 2023 629
4 août 2019 à 08:21
Bonjour
Je me souviens, de différences parfois étonnantes entre la requête dans access et celle dans le code quand je faisais du vb6 (j’ai arrêté en 2007, ça commence à flou comme souvenir...)

A tout hasard teste ceci
string Sql = "UPDATE T_Statuts SET Password='azerty' WHERE Statut_ID='1'";
0
MGD Software Messages postés 193 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 2
7 août 2019 à 19:09
J'ai trouvé ! (après énormément de bidouilles et d'échecs et une perte de temps considérable).

En mettant le mot Password entre crochets, il n' a plus d'erreur de syntaxe.
J'en déduis que le mot Password est un mot réservé quand on l'utilise avec oledb (la requete SQL rigoureusement identique dans Access ne provoque pas d'erreur).
Après quelques autres déboires, il semble que le mot Key soit dans le même cas.

Et donc, le code suivant ne provoque plus d'erreur :
Sql = "UPDATE T_Statuts SET [Password]=@Pwd WHERE Statut_ID=@ID";
Cmd = new OleDbCommand(Sql, Common.gCnx);
Cmd.Parameters.AddWithValue("Pwd", NewPwd);
Cmd.Parameters.AddWithValue("ID", CatID);
Result = Cmd.ExecuteNonQuery();


Désormais, je pense qu'il est préférable de toujours encadrer les noms des champs, bien que le crochet ne soit pas un standard SQL (en PHP, c'est l'apostrophe `inversée`)

Qu'on se le dise !
0
Rejoignez-nous