2013-04-09 118 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