2013-04-26 114 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

相關問題