C# 当我更新一行时,gridview中的所有行都会更新

C# 当我更新一行时,gridview中的所有行都会更新,c#,sql,asp.net,C#,Sql,Asp.net,我正在Gridview中使用RowUpdate事件。当我更新一行时,gridview中的所有行都会更新。我的代码是 Con.Open(); SqlCommand cmd = new SqlCommand("update dbo.PersionalDetails set Name='" + txtName.Text + "',Location='" + txtLocation.Text + "' where id=id", Con); cmd.ExecuteNonQuery(); Con.Clos

我正在Gridview中使用RowUpdate事件。当我更新一行时,gridview中的所有行都会更新。我的代码是

Con.Open();
SqlCommand cmd = new SqlCommand("update dbo.PersionalDetails set Name='" + txtName.Text + "',Location='" + txtLocation.Text + "' where id=id", Con);
cmd.ExecuteNonQuery();
Con.Close();
Label lblresult = new Label();
lblresult.ForeColor = Color.Green;
lblresult.Text = txtName.Text + " Details Updated successfully";
GridView1.EditIndex = -1;
BindGrid();
请帮忙

这是因为其中id=id对于所有行都是真的。这就像1=1,等于TRUE。这就是为什么您的所有行都会更新

返回类型

布尔值

因为id是列名,所以它们是有效的

我强烈地感觉到您想要添加这个id作为参数,但您甚至没有在代码中提到任何参数,所以

还可用于处置SqlConnection和SqlCommand

但更重要的是 你应该经常使用。这种类型的字符串连接对攻击是开放的

因为我们不知道您的列类型,所以我在示例中使用AddWithValue,但不使用此方法。作为最佳实践使用

阅读:

这是因为其中id=id对于所有行都是真的。这就像1=1,等于TRUE。这就是为什么您的所有行都会更新

返回类型

布尔值

因为id是列名,所以它们是有效的

我强烈地感觉到您想要添加这个id作为参数,但您甚至没有在代码中提到任何参数,所以

还可用于处置SqlConnection和SqlCommand

但更重要的是 你应该经常使用。这种类型的字符串连接对攻击是开放的

因为我们不知道您的列类型,所以我在示例中使用AddWithValue,但不使用此方法。作为最佳实践使用


阅读:

用以下内容更改where子句:

where id='"+id+"'
并传递id的值


完成了

使用以下内容更改where子句:

where id='"+id+"'
并传递id的值


完成了

请查看where子句并更正它,它总是正确的


还有一件事,请务必阅读有关SQL注入的内容,并更改您的编码风格。此代码将无法在internet上使用

请查看where子句并更正它,它总是正确的


还有一件事,请务必阅读有关SQL注入的内容,并更改您的编码风格。此代码将无法在internet上使用

Id始终等于Id。。首先移除sql注入;升降台xxx;-。。。。并将其中的'id=id'更改为参数sid始终等于id。。首先移除sql注入;升降台xxx;-。。。。将where'id=id'改为parameters,但如果他想更新特定的行,那么他必须传递id的值……不是吗?@rushankshah,没错。当他将id作为值传递时,它只匹配id列中具有此值的行。但是如果他想更新特定行,那么他必须传递id的值……不是吗?@rushankshah没错。当他将id作为值传递时,它只匹配id列中具有此值的行。
where id='"+id+"'