查询更新所有数据,而不是只更新我想要的数据
本文关键字:数据 更新 我想要 查询 | 更新日期: 2023-09-27 18:06:03
如何使我的查询只更新我想要的数据?
下面是当前代码
string query = string.Format("update Customer set title='{0}',[Name]='{1}'",titleComboBox2.Text,nameTextBox2.Text,"where ID="+idTextBox+"");
显然查询的最后一部分不工作。为什么会这样呢?
因为您的第三个参数WHERE
部分没有使用任何索引参数作为{2}
这就是为什么你的查询将只包含update Customer set title='{0}',[Name]='{1}'
部分,这将更新你的所有行,因为它没有任何过滤器。
query
。
但更重要的是
您应该始终使用参数化查询。这种字符串连接容易受到SQL注入攻击。
假设您使用ADO.NET;
using(var con = new SqlConnection(conString))
using(var cmd = con.CreateCommand())
{
cmd.CommandText = @"update Customer set title = @title, [Name] = @name
where ID = @id";
cmd.Paramter.Add("@title", SqlDbType.NVarChar).Value = titleComboBox2.Text;
cmd.Paramter.Add("@name", SqlDbType.NVarChar).Value = nameTextBox2.Text;
cmd.Paramter.Add("@id", SqlDbType.Int).Value = int.Parse(idTextBox.Text);
// I assumed your column types.
con.Open();
cmd.ExecuteNonQuery();
}
目前您的查询不使用WHERE
子句,因为它被string.Format
忽略了。您有3个占位符参数,并且您只使用{0}
和{1}
,因此WHERE
部分从未添加到SQL查询中。更改查询以包含WHERE
子句,例如:
string query = string.Format("update Customer set title='{0}',[Name]='{1}' {2}",titleComboBox2.Text,nameTextBox2.Text,"where ID="+idTextBox.Text+"");
然而,你的代码中有一个非常严重的缺陷——它很容易受到SQL注入攻击。网上有数百篇关于它的文章,请务必阅读它是什么以及如何相应地更新您的代码(提示-参数化查询)