查询更新所有数据,而不是只更新我想要的数据

本文关键字:数据 更新 我想要 查询 | 更新日期: 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注入攻击。网上有数百篇关于它的文章,请务必阅读它是什么以及如何相应地更新您的代码(提示-参数化查询)