OleDbCommand erreur de syntaxe avec UPDATE [Résolu]

Messages postés
155
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
7 août 2019
- - Dernière réponse : MGD Software
Messages postés
155
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
7 août 2019
- 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.
Afficher la suite 

2 réponses

Messages postés
13584
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 août 2019
294
0
Merci
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'";
Commenter la réponse de Whismeril
Messages postés
155
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
7 août 2019
0
Merci
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 !
Commenter la réponse de MGD Software