带参数的SQLCommand不再更新我的表

时间:2013-12-17 19:49:16

标签: c# sql parameters sqlcommand executenonquery

我正在修改以前的开发人员代码,发现他没有在更新语句中使用参数。我去用参数修改它以使其更安全以防注射,现在它根本不会更新。它确实用旧代码更新。代码逐步完成。它没有错误,但不更新表。如果值显示为

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"]);

2 个答案:

答案 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调用将评估这些值是字符串,并正确传递它们,而无需在参数周围放置单引号。