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