C# 如何更新datagridview中选定的行值?

C# 如何更新datagridview中选定的行值?,c#,sql,winforms,C#,Sql,Winforms,我一直在尝试更新在windows窗体datagridview中设置为数据源的sql数据库中的值,但最终更新了所有行。 我一直在为我参加的开发课程创建一个基本任务管理器应用程序 我很难找出问题所在。我认为我的代码可能未正确设置为所选行 我已经提供了下面的代码,任何和所有的帮助将不胜感激。如果有人需要进一步澄清,请在聊天中给我留言。竖起大拇指 我当前的代码: private void UpdateBtn_Click(object sender, EventArgs e) { //Updat

我一直在尝试更新在windows窗体datagridview中设置为数据源的sql数据库中的值,但最终更新了所有行。 我一直在为我参加的开发课程创建一个基本任务管理器应用程序

我很难找出问题所在。我认为我的代码可能未正确设置为所选行

我已经提供了下面的代码,任何和所有的帮助将不胜感激。如果有人需要进一步澄清,请在聊天中给我留言。竖起大拇指

我当前的代码:

private void UpdateBtn_Click(object sender, EventArgs e)
{

    //Update button [almost done - data is not updating correctly]
    string connectionString = "Data Source =ULTRA-COMPUTER; Initial Catalog =test; Persist Security Info =True; User ID = sa; Password = 12345";
    SqlConnection con = new SqlConnection(connectionString);
    string queryStatement = "SELECT * FROM testtask";

    if (Task.Text != "" && Date.Text != "")
    {
        SqlCommand cmd = new SqlCommand(queryStatement, con);
        DataTable task = new DataTable("testtask");
        SqlDataAdapter ada = new SqlDataAdapter(cmd);

        con.Open();
        cmd.CommandText = "UPDATE [testtask] SET Task='" + Task.Text + "',Date='" + Date.Text + "' ";
        cmd.Connection = con;
        cmd.Parameters.AddWithValue("@Task", Task.Text);
        cmd.Parameters.AddWithValue("@Date", Date.Text);
        cmd.ExecuteNonQuery();
        TaskData.DataSource = task;
        MessageBox.Show("Update Inserted!");
        ClearTxt();
    }

    else
    {
        MessageBox.Show("Please Enter A Task/DueDate To Update");
    }
    con.Close();
}

我认为问题出在这方面

cmd.CommandText = "UPDATE [testtask] SET Task='" + Task.Text + "',Date='" + Date.Text + "' ";
您没有添加where子句,因此它将更新表中的所有行。 必须添加where子句

例如,您将taskid作为此表中的主键,并希望使用taskid 999更新任务,那么您的查询必须是

cmd.CommandText = "UPDATE [testtask] SET Task='" + Task.Text + "',Date='" + Date.Text + "' where taskid = 999 ";

首先在datagridview中为数据库表的主键添加一个隐藏列。现在,当您要更新已编辑的选定行时,请在查询的where条件中使用该主键

cmd.CommandText = "UPDATE [testtask] SET Task='" + Task.Text + "',Date='" + Date.Text + "WHERE [TaskId]=@TaskId";
cmd.Parameters.AddWithValue("@TaskId", TaskIdFromDatagridview);

update子句没有where条件,因此更新表中的每一行。阅读sql的基础知识以及如何在update和delete子句中使用where条件。此外,请始终使用参数化查询来避免sql注入攻击。更新查询中没有带条件的WHERE子句。您不完全理解如何在sql字符串中指定Parameter。您的更新SQL应该看起来像
“update[testtask]SET Task=@Task,Date=@Date”
请说明他应该使用自己的参数
“update[testtask]SET Task=@Task,Date=@Date”…
请说明他应该使用自己的参数
“update[testtask]SET Task=@Task,Date=@Date”
是,这就是为什么我在where条件中添加了一个参数。这样他就能理解使用参数的方法了,这就成功了。我还编辑了参数以处理where条件。万分感谢!竖起两个大拇指