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

时间:2010-12-13 23:56:09

标签: sql vb.net

我正在尝试在vb.net中执行一个sql语句到Access数据库,我正在使用方括号[]转义重新保存的单词。这在程序中的所有SELECT语句中都有效。

保留字为level

但是下面的SQL语句没有说

  

INSERT INTO语句中的语法错误。

如果我直接复制该语句并在Access中执行它可以正常工作

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

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

感谢。

2 个答案:

答案 0 :(得分: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以执行插入。

答案 1 :(得分:0)

始终使用parameters。你正在做的事情是非常危险的,并为SQL injection敞开大门。

然后,您不必担心转义要插入数据库的值。