2013-04-26 116 views
1

我在C-Sharp表单应用程序中写入以下代码,并给出了以下错误消息。INSERT INTO语句中的语法错误

> Syntax error in INSERT INTO statement. 


OleDbCommand cmd = 
    new OleDbCommand(
      "Insert into Info (username, password) Values ('" 
      + username 
      + "', '" 
      + password 
      + "')" 
     , conn 
    ); 

回答

3

单词PASSWORD是一个保留关键字。 要使用它,您应该将字符串中的方括号

OleDbCommand cmd = new OleDbCommand("Insert into Info (username, [password]) Values ('" + username + "', '" + password + "')", conn); 

还有,请不要使用字符串连接来构建SQL语句。这是一个非常糟糕的做法,导致其他语法错误(用单引号的用户名或密码)或最糟糕的SQL注入攻击。乘坐look here,如果你有一个聪明和恶意用户

OleDbCommand cmd = new OleDbCommand("Insert into Info (username, [password]) Values (?,?)", conn); 
cmd.Parameters.AddWithValue("@p1", username); 
cmd.Parameters.AddWithValue("@p2", password); 
cmd.ExecuteNonQuery(); 
+0

我也可以写这样的命令,oledbCommand cmd = new oledbcommand(“Select * from Table where id =?and password =?”) – 2013-04-26 16:11:35

+0

当然,这个概念是一样的。参数应该始终用于传递用户输入文本。尽管如此,您不能使用参数来表示表名或列名。 – Steve 2013-04-26 17:07:43

1

也许在用户名或密码变量中存在非法字符(例如单引号)。确保他们已经过消毒。

+0

这是一个好点,但更好的办法来对付这种可能性会发生什么是使用参数查询作为史蒂夫建议。 – HansUp 2013-04-26 15:36:48

2

您需要将password括起来。这是一个reserved word

OleDbCommand cmd = 
    new OleDbCommand("Insert into Info (username, [password]) Values ('" + username + "', '" + password + "')", conn); 
+0

@HansUp - 认为它是用户名,但用户是保留字。输入太快。 :) – 2013-04-26 15:28:12

+0

是的,'用户名'*看起来*可疑。 :-)括号不会伤害......所以包括它们不是问题。你基于'[password]'获得+1。 – HansUp 2013-04-26 15:33:45

+0

@HansUp谢谢!是的,方括号不会伤害(至少,我不认为他们这样做)。 – 2013-04-26 15:36:41

相关问题