c#
  • sql
  • 2016-10-03 146 views -4 likes 
    -4

    我卡在此代碼:C#語法錯誤

    con.Open(); 
    
    OleDbCommand cmd1 = new OleDbCommand(); 
    cmd1.Connection = con; 
    cmd1.CommandText = "update login set password='"+passw.Text+"', Username='" + username.Text + "', firstname='" + user_name.Text + "', address='" + useraddress.Text + "',contact_no='" + usercontactno.Text + "',email='" + useremail.Text + "',birthday='" + userbirthday.Text + "',age='" + userage.Text + "' where id=" + nem + " "; 
    
    cmd1.ExecuteNonQuery(); 
    con.Close(); 
    

    查詢工作很好,但我每次運行它時,它說,「密碼='‘+ passw.text +’ '「有語法錯誤。如果我刪除該行更新正常工作。

    +7

    不要存儲明文密碼。這不是20世紀70年代!也不要連接用戶輸入的文本字段:使用參數。 –

    +0

    將文本輸出到控制檯並查看它!如果passw.Text包含'你確實卡住了.. – TaW

    +8

    Little Bobby Tables喜歡此代碼。 –

    回答

    0

    兩個最有可能的問題,我現在看到的:

    1. passw.Text可能沒有價值和登錄表,密碼列不允許空值
    2. 登錄表沒有一個列名爲「密碼」
    +0

    另一個問題,可能是,他的'passw.Text'返回一個特殊字符 – Jacky

    1

    密碼是一個保留關鍵字。你需要引用它作爲[密碼]或「密碼」,例如:

    cmd1.CommandText = "update login set [password]='"+passw.Text+"', Username='" + username.Text + "', firstname='" + user_name.Text + "', address='" + useraddress.Text + "',contact_no='" + usercontactno.Text + "',email='" + useremail.Text + "',birthday='" + userbirthday.Text + "',age='" + userage.Text + "' where id=" + nem + " "; 
    

    此外,你需要避免被路過的輸入字符串到這樣的SQL語句的另一個重要的事情。你需要在輸入字符串中加引號。名字設置爲Bla'bla將打破你的代碼。避免這種情況的最好方法是使用參數。

    最後,連接和命令對象都是一次性的,所以最好將它們包裝在一個使用塊中。

    +0

    好抓!儘管在__all__ SQL [dialects](http://developer.mimer.se/validator/sql-reserved-words.tml)中保留了__not__,但它[可能在此](http://www.petefreitag.com/ tools/sql_reserved_words_checker /?word = password) 。 – TaW

    相關問題