2013-04-09 342 views
1

我正在使用.NET Web Forms和.mdb數據庫構建一個簡單的網站作爲數據源。更新mdb數據庫表

問題是:我有一個工作的backsite低谷,我可以創建,修改和刪除一個新頁面。

雖然我可以創建和刪除,但編輯功能不起作用。

我意識到問題可能出現在查詢中,因爲代碼對於其他功能來說工作正常。

下面是該查詢:

UPDATE pages 
SET title=\"" + pa.title + "\" content =\"" + pa.content + "\" 
WHERE id=" + pa.id 

我不是很喜歡SQL的,我做錯了什麼?

謝謝您提前

編輯N°2。目前,查詢不能正常工作,基本上,一些內容和標題中有撇號,當我更新該特定頁面時,它不會更新。我嘗試使用Regex.Escape,但它創造了一大堆\添加。

回答

7

嗯,你的更新查詢缺少字段之間用逗號,但這只是一個大冰山

UPDATE pages SET title=" + pa.title + ", content =" + pa.content + " WHERE id=" + pa.id 

你這樣寫的查詢被暴露在大的安全問題的一角。這就是所謂的Sql Injection

我將展示一個僞代碼,因爲我沒有你的實際代碼

string queryText = "UPDATE pages SET [email protected], [email protected] WHERE [email protected]" 

using(SqlConnection cn = new SqlConnection(connection_string)) 
using(SqlCommand cmd = new SqlCommand(queryText, cn) 
{ 
    cmd.Parameters.AddWithValue("@title", pa.title); 
    cmd.Parameters.AddWithValue("@content", pa.content); 
    cmd.Parameters.AddWithValue("@id", pa.id); 
    cmd.ExecuteNonQuery(); 
} 

這樣你避免SQL注入問題工作的樣本,單引號的解析你的價值觀裏由於連接未處理而泄露系統資源。


Parametrized Queries
Using Statement

+0

謝謝你的幫助,我要儘快重寫代碼和學習SQL注入。 – Fonzusys 2013-04-09 15:59:43

0
@"UPDATE pages 
    SET title= '" + pa.title + @"', 
     content = '" + pa.content + @"' 
    WHERE id= " + pa.id