2010-12-13 23 views
0

J'essaie d'exécuter une instruction sql dans vb.net vers une base de données Access, j'échappe au mot reserverd en utilisant des crochets []. Cela a fonctionné dans toutes mes instructions SELECT dans le programme.vb.net escape mots-clés réservés dans l'instruction SQL

Le mot réservé est level

Mais l'instruction SQL inférieure ne tient pas dire

Erreur de syntaxe dans INSERT INTO.

Si je copie directement la déclaration et exécute ce dans Access il fonctionne très bien

datalayer.getDataTable(String.Format("INSERT INTO users (username, password, [level]) VALUES ({0}, {1}, {2})", username, password, level)) 

La déclaration ci-dessus fonctionne si je retire [niveau] et le remplacer par un autre nom de colonne.

Merci.

Répondre

1

Vous ne masquez pas vos valeurs entre guillemets. Essayez ceci:

datalayer.getDataTable(String.Format(
"INSERT INTO users (username, password, [level]) VALUES ('{0}', '{1}', '{2}')", 
username, password, level)) 

Cependant, comme Andrew le dit, vous devriez vraiment utiliser des paramètres. Dans Access SQL (David W Fenton viendra bientôt et dire qu'il est "Jet" SQL) vous devez utiliser les paramètres de position. Votre déclaration alors ressembler à ceci:

INSERT INTO users (username, password, [level]) VALUES (?, ?, ?) 

Vous auriez besoin de créer des objets OleDbParameter avec les valeurs correctes, et un OleDbCommand avec le texte ci-dessus pour exécuter afin de faire votre insert.

+0

J'ai essayé de citer les valeurs, mais cela a toujours le même résultat? Merci. – Elliott

+0

@Elliott, modifiez votre réponse et montrez-nous les instructions exactes que vous exécutez dans Access. Tant celui avec [niveau] qui ne fonctionne pas, et celui avec quelque chose d'autre qui fonctionne. –

0

Toujours utiliser parameters. Ce que vous faites est très dangereux et laisse la porte ouverte à SQL injection.

Ensuite, vous n'aurez plus à vous soucier d'échapper les valeurs que vous insérez dans la base de données.

+0

Salut, comme ce projet est pour l'université, je n'ai pas à m'inquiéter des problèmes de sécurité, y at-il une solution rapide pour cela? Merci – Elliott

+0

Pas vraiment - en utilisant des paramètres vous obtenez une sécurité améliorée et supprimez le besoin d'échapper aux données. –

+0

J'aurais tendance à m'inquiéter de la sécurité, mais je suis pressé de terminer ce projet, mais je suppose que je vais m'y pencher. Merci :) – Elliott