【发布时间】: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"