我正在尝试在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]并将其替换为另一个列名,则上述语句有效。
感谢。
答案 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敞开大门。
然后,您不必担心转义要插入数据库的值。