2012-04-19 61 views
2
public void RegisterUser(string passw,string uname ,string fname ,string lname, string email) 
{ 
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values ('" + passw + "','" + uname + "','" + fname + "','" + lname + "','" + email + "')";               
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand(strSql,cn); 
    int yy= cmd.ExecuteNonQuery(); 
    cn.Close(); 
    cn.Dispose(); 

} 

語法錯誤,無論我做什麼,我得到了同樣的錯誤 沒有人在這裏看到什麼了嗎? 或有另一種創造性的方法來解決這個問題 謝謝System.Data.OleDb.OleDbException:INSERT INTO語句中

+4

使用參數化命令,它更安全http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.80).aspx – Fabio 2012-04-19 22:33:26

+0

您可以設置斷點並打印查詢字符串的內容? – 2012-04-19 22:34:52

+3

O'Malley的姓是? – 2012-04-19 22:47:18

回答

6

你的代碼可以動態改變,取決於用戶輸入。這就是導致錯誤的原因。

讓我來解釋一下,如果你的任何一個輸入字段包含一個apostroph ['] sql中斷並且現在有一個未封閉的引用。

不僅它也暴露您的代碼SQL注入攻擊

所以我建議你使用參數傳遞值作爲參數被視爲不同的,是安全的,以及防止SQL注入。

public void RegisterUser(string passw,string uname ,string fname ,string lname, string email) 
{ 
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values  (@passw,@uname,@fname,@lname,@email)";               
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand(strSql,cn); 
    cmd.Parameters.AddWithValue("@passw",passw); 
    cmd.Parameters.AddWithValue("@uname",uname); 
    cmd.Parameters.AddWithValue("@fname",fname); 
    cmd.Parameters.AddWithValue("@lname",lname); 
    cmd.Parameters.AddWithValue("@email",email); 
    int yy= cmd.ExecuteNonQuery(); 
    cn.Close(); 
    cn.Dispose(); 
} 
+0

不客氣。只是爲了通知你,如果真的有幫助,那麼你可以通過在答案左側打勾(右)符號來接受答案。 – Deb 2012-04-20 14:00:54

0

在Oracle,user是一個保留字和INSERT INTO User ...生成ORA-00903: invalid table name