我正在修改以前的开发人员代码,发现他没有在更新语句中使用参数。我去用参数修改它以使其更安全以防注射,现在它根本不会更新。它确实用旧代码更新。代码逐步完成。它没有错误,但不更新表。如果值显示为
csharpa="Hello"
csharpb="Text"
csharpc="1"
在调试期间。检查表格
select * from table where sqlb="Text" and sqlc="1"
它仍然具有
中的先前值sqla="Goodbye"
没有像我期望的那样更新为Hello。
之前的代码:
string q = "update table set sqla='" +
csharpa + "' where sqlb='" + csharpb +
"' and sqlc=" + (string)HttpContext.Current.Session["csharpc"];
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
conn.Open();
sda.ExecuteNonQuery();
conn.Close();
代码之后:
string q = "update table set sqla='@para' where sqlb='@parb' and sqlc=@parc";
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
sda.Parameters.AddWithValue("@para", csharpa);
sda.Parameters.AddWithValue("@parb", csharpb);
sda.Parameters.AddWithValue("@parc", (string)HttpContext.Current.Session["csharpc"]);
答案 0 :(得分:3)
删除引号:
string q = "update table set sqla=@para where sqlb=@parb and sqlc=@parc";
您的数据库会自动知道该字段是否为字符串,因此您无需在引号中包含任何内容。
答案 1 :(得分:2)
您的参数化语句中不需要单引号。
更改此行:
string q = "update table set sqla='@para' where sqlb='@parb' and sqlc=@parc";
到此:
string q = "update table set sqla=@para where sqlb=@parb and sqlc=@parc";
您的sda.Parameters.AddWithValue
调用将评估这些值是字符串,并正确传递它们,而无需在参数周围放置单引号。