C# 如何为DataGridView实现更新按钮 通过DataHandler类将数据保存到数据库
代码存在的问题
- 缺失有效的SQL执行逻辑:注释的UPDATE语句未赋值给SqlCommand对象,且SqlCommand未关联数据库连接对象,直接调用ExecuteNonQuery必然报错
- SQL语句语法错误:字段赋值之间缺少逗号分隔,gender字段后缺少等号,且没有加
WHERE条件,执行后会覆盖全表所有数据 - 字符串拼接SQL存在SQL注入风险,建议使用参数化查询
- 手机号用int类型存储会溢出:int最大值仅为2147483647,无法存储11位手机号,建议改为long类型
- 现有调用未关联DataGridView,更新后未刷新DGV数据源,无法实现界面同步
修改后的DataHandler类代码
// 假设你的DataHandler中已经正确初始化了SqlConnection conn对象 public void UpdateStudent(int number, string name, string surname, string dob, string gender, long phone, string address) { try { // 修正SQL语句,添加WHERE条件指定仅更新对应学号的学生数据,使用参数占位避免注入 string updateQuery = @"UPDATE Student SET name = @Name, surname = @Surname, dob = @Dob, gender = @Gender, phone = @Phone, address = @Address WHERE number = @Number"; conn.Open(); // 给SqlCommand关联连接对象和SQL语句 SqlCommand cmd = new SqlCommand(updateQuery, conn); // 给参数赋值,自动处理类型转义 cmd.Parameters.AddWithValue("@Number", number); cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@Surname", surname); cmd.Parameters.AddWithValue("@Dob", dob); cmd.Parameters.AddWithValue("@Gender", gender); cmd.Parameters.AddWithValue("@Phone", phone); cmd.Parameters.AddWithValue("@Address", address); cmd.ExecuteNonQuery(); MessageBox.Show("更新成功"); } catch (Exception ex) { MessageBox.Show("更新失败:" + ex.Message); } finally { conn.Close(); } }
同步DataGridView的按钮点击调用代码
如果是直接在DataGridView中编辑数据后点击更新,使用如下代码:
private void btnUpdate_Click(object sender, EventArgs e) { // 校验是否选中要更新的行 if (dataGridView1.SelectedRows.Count == 0) { MessageBox.Show("请先选中要更新的学生行"); return; } // 读取选中行的单元格数据 DataGridViewRow selectedRow = dataGridView1.SelectedRows[0]; DataHandler dh = new DataHandler(); // 调用更新方法,注意列名要和你DataGridView绑定的列名对应 dh.UpdateStudent( int.Parse(selectedRow.Cells["number"].Value.ToString()), selectedRow.Cells["name"].Value.ToString(), selectedRow.Cells["surname"].Value.ToString(), selectedRow.Cells["dob"].Value.ToString(), selectedRow.Cells["gender"].Value.ToString(), long.Parse(selectedRow.Cells["phone"].Value.ToString()), selectedRow.Cells["address"].Value.ToString() ); // 调用你原本绑定DataGridView数据源的方法,刷新界面显示 LoadDataGridView(); }
如果是选中DGV行后修改文本框内容再更新,只需将参数获取逻辑换成从文本框取值即可,更新完成后同样调用LoadDataGridView()刷新DGV。
内容的提问来源于stack exchange,提问作者casey mali
相关产品推荐
相关产品推荐

