当我更新一行时,网格视图中的所有行都会被更新
本文关键字:更新 视图 一行 网格 | 更新日期: 2023-09-27 18:25:07
我正在Gridview中使用RowUpdating事件。当我更新一行时,网格视图中的所有行都会被更新。我的代码是
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();
请帮忙!!
这是因为所有行的where id = id
都是true
。它类似于where 1 = 1
,并且它等于where TRUE
。这就是为什么您的所有行都更新了。
来自=
(等于)(Transact-SQL)
expression = expression
退货类型
布尔
由于id
是列名,因此它们是有效的表达式。
我强烈认为你想添加这个id
作为参数,但你甚至没有在代码中提到任何参数,所以…
也可以使用using
语句来处理您的SqlConnection
和SqlCommand
。
using (SqlConnection con = new SqlConnection(ConString))
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "update dbo.PersionalDetails set Name = @name, Location = @location where id = @id";
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@location", txtLocation.Text );
cmd.Parameters.AddWithValue("@id", YourIdValue);
con.Open();
cmd.ExecuteNonQuery();
}
}
但更重要的是
您应该始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。
由于我们不知道您的列类型,我在示例中使用了AddWithValue
,但没有使用此方法。使用.Add()
作为最佳实践。
阅读:我们可以停止使用AddWithValue()
吗?
用以下内容更改where子句:
where id='"+id+"'
并传递id 的值
它完成了!!!
请查看where子句并更正它,它总是TRUE
阅读关于SQL注入的另一件事,并更改您的编码风格。(此代码将无法在互联网上生存!)