我正在使用.NET Web窗体和.mdb数据库作为数据源来构建一个简单的站点。
.mdb
问题是:我有一个正常工作的后台槽,可以创建,修改和删除新页面。
虽然我可以创建和删除,但是编辑功能不起作用。
我意识到问题可能出在查询中,因为代码对于其他功能运行正常。
这是查询:
UPDATE pages SET title=\"" + pa.title + "\" content =\"" + pa.content + "\" WHERE id=" + pa.id
我不太喜欢SQL,我做错什么了吗?
先感谢您
编辑N掳2。目前,该查询无法正常工作,基本上,某些内容和标题中带有撇号,并且当我更新该特定页面时,它不会更新。我尝试使用Regex.Escape,但添加了许多\会造成混乱。
好了,您的更新查询在字段之间没有逗号,但这只是一个大冰山的一角
UPDATE pages SET title=" + pa.title + ", content =" + pa.content + " WHERE id=" + pa.id
以这种方式编写的查询面临很大的安全性问题。它被称为Sql Injection
我将显示一个伪代码,因为我没有您的实际代码示例
string queryText = "UPDATE pages SET title=@title, content=@content WHERE id=@id" 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 Injection问题,解析值中的单引号以及避免由于未处理连接而导致系统资源泄漏的问题。
请参见使用语句的 参数化查询