【问题标题】:How to update selected row values in datagridview?如何更新 datagridview 中选定的行值?
【发布时间】:2018-05-04 10:30:31
【问题描述】:

我一直在尝试更新在我的 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();
}

【问题讨论】:

  • 您的更新子句没有 where 条件,因此您更新表中的每一行。阅读 sql 的基础知识以及如何在 update 和 delete 子句中使用 where 条件。此外,请始终使用参数化查询来避免 sql 注入攻击。
  • UPDATE 查询中没有带条件的 WHERE 子句。
  • 您没有完全理解如何在 SQL 字符串中指定参数。您的更新 SQL 应类似于 "UPDATE [testtask] SET Task = @Task, Date = @Date"

标签: c# sql winforms


【解决方案1】:

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

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

【讨论】:

  • 请提一下他应该使用他的参数"UPDATE [testtask] SET Task = @Task, Date = @Date" ...
  • 是的,这就是我在 where 条件中添加参数的原因。这样他就可以理解参数的使用方式了。
  • 这成功了。我还编辑了我的参数以使用 where 条件。太感谢了! 竖起 2 个大拇指
【解决方案2】:

我认为问题出在这一行

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 ";

【讨论】:

  • 请提一下他应该使用他的参数"UPDATE [testtask] SET Task = @Task, Date = @Date" ...
猜你喜欢
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多