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

ComboBox选择后无法填充DataGridView的问题求助

修复ComboBox选择后DataGridView加载数据的错误

从你的代码和报错情况来看,核心问题是SQL语句拼接的语法错误,同时还存在资源管理不当的问题。下面一步步帮你解决:

错误原因分析

你的comboBox1_SelectionChangeCommitted方法里,直接把comboBox1.SelectedValue拼进SQL语句中:

  • 如果Mã đề tài是字符串类型,会因为没有给值加单引号导致SQL语法错误;
  • 就算是数字类型,这种写法也存在严重的SQL注入风险;
  • 另外数据库连接、DataAdapter没有正确释放,容易引发资源泄漏。

修正后的完整代码

// 把连接字符串抽成常量,避免重复编写,后续修改更方便
private const string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source= D:\\Database\\đồ án\\Đồ án.mdb";

private void Form2_Load(object sender, EventArgs e)
{
    // 使用using语句自动释放数据库连接资源,不用手动Dispose
    using (OleDbConnection con = new OleDbConnection(ConnectionString))
    {
        DataTable dt = new DataTable();
        OleDbDataAdapter da = new OleDbDataAdapter("Select * from Sheet1", con);
        da.Fill(dt);
        
        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "Tên đề tài";
        comboBox1.ValueMember = "Mã đề tài";
    }
}

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    // 先判断SelectedValue是否为空,避免空引用崩溃
    if (comboBox1.SelectedValue == null)
        return;

    using (OleDbConnection con = new OleDbConnection(ConnectionString))
    {
        DataTable dt = new DataTable();
        // 用参数化查询,避免语法错误和SQL注入,字段名加方括号适配特殊字符
        string sql = "Select * from Sheet11 Where [Mã đề tài] = @MaDeTai";
        OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
        
        // 根据字段实际类型选择OleDbType,比如如果是数字就用OleDbType.Integer
        da.SelectCommand.Parameters.Add("@MaDeTai", OleDbType.VarChar).Value = comboBox1.SelectedValue.ToString();
        da.Fill(dt);
        
        dataGridView1.DataSource = dt;
    }
}

关键改进点说明

  • 参数化查询:这是解决当前问题的核心,通过@MaDeTai参数传递值,数据库会自动处理类型和引号问题,同时彻底避免SQL注入风险。
  • using语句管理资源:自动释放数据库连接、DataAdapter等实现IDisposable接口的资源,不用手动调用Dispose,防止资源泄漏。
  • 特殊字段名处理:因为你的字段名包含空格和重音字符,用[Mã đề tài]包裹可以避免SQL语法识别错误。
  • 空值判断:添加comboBox1.SelectedValue == null的判断,防止程序因空引用崩溃。

额外检查项

  1. 确认Sheet11表中确实存在Mã đề tài字段,且字段类型和Sheet1中的Mã đề tài类型一致;
  2. 数据库文件路径是否正确,确保程序运行时能访问到该路径(如果是发布程序,建议使用相对路径或者配置文件存储路径)。

内容的提问来源于stack exchange,提问作者Matatabi2309

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:22