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

C#中用单条SELECT查询填充多个ComboBox异常:仅第一个被填充

问题分析与解决方案

嗨,我一眼就发现问题所在了——你的while循环没有用大括号包裹所有需要重复执行的代码!

问题根源

当前代码中,while(reader.Read())后面直接紧跟了cmbcoursecode.Items.Add(reader.GetString(1));,这意味着只有这一行代码会在每次循环迭代中执行。而cmbcoursedesc.Items.Add(reader.GetString(2));只会在整个循环结束后执行一次,自然只有第一个ComboBox能被正确填充。

修正后的代码

private void loadcourses() {
    try {
        using (sqlcon) {
            sqlcon.Open();
            coursecmd = new SqlCommand("SELECT * FROM DegCourses", sqlcon);
            // 用using包裹SqlDataReader,自动释放资源
            using (SqlDataReader reader = coursecmd.ExecuteReader()) {
                if (reader.HasRows) {
                    // 用大括号包裹循环内所有操作
                    while(reader.Read()) {
                        cmbcoursecode.Items.Add(reader.GetString(1));
                        cmbcoursedesc.Items.Add(reader.GetString(2));
                    }
                }
            }
        }
    } catch (Exception ex) {
        // 捕获异常时输出错误信息,方便调试
        MessageBox.Show($"加载课程数据失败:{ex.Message}");
    }
}

额外建议

  • 始终用using语句包裹SqlDataReader,确保数据库资源被正确释放,避免内存泄漏。
  • 不要空捕获异常,至少输出错误信息,这样出现问题时能快速定位原因。
  • 建议不要用SELECT *,而是明确指定需要的列名(比如SELECT CourseCode, CourseDesc FROM DegCourses),这样代码更清晰,也能避免因表结构变更导致的索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:05:18