一尘不染

vb.net在sql语句中转义保留关键字

sql

我正在尝试在vb.net中对Access数据库执行sql语句,我使用方括号[]来转义保留字。这在我SELECT在程序中的所有语句中都起作用。

保留字是 level

但是下面的SQL语句失败说

INSERT INTO语句中的语法错误。

如果我直接复制该语句并在Access中执行该语句,则效果很好

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

如果删除[level]并将其替换为另一个列名,则以上语句有效。

谢谢。


阅读 139

收藏
2021-03-17

共1个答案

一尘不染

您没有将值括在引号中。试试这个:

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

但是,正如安德鲁所说,您应该真正使用参数。在Access SQL中 (David W Fenton将很快出现,并说这是“ Jet” SQL),
您必须使用位置参数。您的陈述将如下所示:

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

您需要使用正确的值创建OleDbParameter对象,并使用上面的文本创建一个OleDbCommand才能执行以进行插入。

2021-03-17