我正在尝试在vb.net中对Access数据库执行sql语句,我使用方括号[]来转义保留字。这在我SELECT在程序中的所有语句中都起作用。
SELECT
保留字是 level
level
但是下面的SQL语句失败说
INSERT INTO语句中的语法错误。
如果我直接复制该语句并在Access中执行该语句,则效果很好
datalayer.getDataTable(String.Format("INSERT INTO users (username, password, [level]) VALUES ({0}, {1}, {2})", username, password, level))
如果删除[level]并将其替换为另一个列名,则以上语句有效。
谢谢。
您没有将值括在引号中。试试这个:
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才能执行以进行插入。