2010-12-13 77 views
0

我想执行一个sql语句在vb.net到一个Access数据库,我使用方括号[]逃避了保留字。这在我的程序中的所有SELECT声明中都有效。vb.net转义sql语句中的保留关键字

保留字是level

但下面的SQL语句失败说

在INSERT的语法错误的语句。

如果我直接复制该语句,并在Access执行该正常工作

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

如果我删除[等级],并与另一列名替换该上述语句的工作。

谢谢。

回答

1

你没有用引号括起你的值。试试这个:

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

但是,正如Andrew所说,你应该真的使用参数。在访问SQL (大卫W芬顿将很快来,并说它是“Jet”SQL)你必须使用位置参数。然后,您的发言是这样的:

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

你需要用正确的价值观创建OleDbParameter对象,并用文字一个OleDbCommand以上才能做你插入执行。

+0

我尝试过引用值,但这仍然有相同的结果?谢谢。 – Elliott 2010-12-14 00:08:17

+0

@Elliott,编辑你的答案并向我们展示你在Access中执行的确切语句。无论是[水平]还是不起作用的那个,还有其他一些能够起作用的那个。 – 2010-12-14 01:35:06

0

始终使用parameters。你在做什么是非常危险的,并打开SQL injection

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

+0

嗨,因为这个项目是为大学生,我不必担心安全问题,有没有快速解决这个问题?谢谢 – Elliott 2010-12-14 00:04:18

+0

并非如此 - 通过使用参数可以提高安全性并消除转义数据的需要。 – 2010-12-14 00:07:28

+0

我会担心安全,但我很急于完成这个项目,但我想我会考虑它。谢谢:) – Elliott 2010-12-14 00:15:06