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

如何在C# Web应用中通过SQL查询获取单个教师ID对应的多个班级信息

问题根因

  1. 你当前的Teacher类设计仅支持存储单个班级信息,循环读取多条查询结果时,新的班级数据会覆盖上一次的赋值,最终仅保留最后一条结果的班级信息。
  2. 你的SQL查询直接拼接参数存在SQL注入风险,建议改为参数化查询。

步骤1:修改Teacher类定义

将原本单值的班级属性改为集合类型,支持存储多个班级数据,示例:

public class Teacher
{
    public int TeacherId { get; set; }
    public string TeacherFName { get; set; }
    public string TeacherLName { get; set; }
    // 新增集合类型存储多个班级
    public List<string> TaughtClassNames { get; set; } = new List<string>();
    public List<string> TaughtClassCodes { get; set; } = new List<string>();
}

步骤2:修改数据读取逻辑

教师的基本信息(ID、姓名)在所有查询结果中是一致的,只需赋值一次,每次循环仅新增班级数据即可,同时改为参数化查询避免注入风险:

public Teacher FindTeacher(int TeacherId)
{
    // 用using包裹连接自动释放资源,避免泄漏
    using MySqlConnection Conn = School.AccessDatabase();
    Conn.Open();

    using MySqlCommand cmd = Conn.CreateCommand();
    // 参数化查询避免SQL注入
    cmd.CommandText = "Select * from Teachers Join Classes on teachers.teacherid = classes.teacherid where teachers.teacherid = @TeacherId";
    cmd.Parameters.AddWithValue("@TeacherId", TeacherId);

    using MySqlDataReader ResultSet = cmd.ExecuteReader();
    Teacher SelectedTeacher = new Teacher();
    // 标记是否已经完成教师基本信息赋值
    bool isBasicInfoSet = false;

    while (ResultSet.Read())
    {
        // 基本信息只赋值一次
        if (!isBasicInfoSet)
        {
            SelectedTeacher.TeacherId = Convert.ToInt32(ResultSet["teacherid"]);
            SelectedTeacher.TeacherFName = ResultSet["teacherfname"].ToString();
            SelectedTeacher.TeacherLName = ResultSet["teacherlname"].ToString();
            isBasicInfoSet = true;
        }
        // 每次循环都添加班级信息到集合
        SelectedTeacher.TaughtClassNames.Add(ResultSet["classname"].ToString());
        SelectedTeacher.TaughtClassCodes.Add(ResultSet["classcode"].ToString());
    }

    return SelectedTeacher;
}

步骤3:按需求格式化输出

拿到数据后可以直接拼接成你需要的文本格式,示例:

var teacher = FindTeacher(1);
var output = $"{teacher.TeacherLName}先生教授{string.Join("和", teacher.TaughtClassNames)}";
// 输出示例:史密斯先生教授A班和B班

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:03