You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:54:04