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

如何用C#和MySQL获取教师教授的所有课程列表

解决方案

要实现返回包含教师所有课程列表的功能,需按以下步骤修改代码:

1. 定义课程实体类

首先创建一个Course类来封装课程信息(根据你的classes表字段调整属性):

public class Course
{
    public int ClassId { get; set; }
    public string ClassName { get; set; }
    // 添加其他课程属性,如classcode、startdate等
}

2. 修改教师实体类

在Teacher类中添加一个课程列表属性,并在构造函数中初始化列表以避免空引用:

public class Teacher
{
    public int TeacherId { get; set; }
    public string TeacherFname { get; set; }
    // 添加其他教师属性,如teacherlname、employeenumber等
    public List<Course> Courses { get; set; }

    public Teacher()
    {
        Courses = new List<Course>();
    }
}

3. 调整数据查询方法

修改FindTeacher方法,确保教师信息只赋值一次,并将每门课程添加到列表中:

[HttpGet]
[Route("api/teacherdata/findteacher/{teacherid}")]
public Teacher FindTeacher(int TeacherId)
{
    Teacher NewTeacher = new Teacher();

    // 使用using自动管理连接资源,无需手动调用Close()
    using (MySqlConnection Conn = School.AccessDatabase())
    {
        Conn.Open();
        
        MySqlCommand cmd = Conn.CreateCommand();
        // 明确指定查询字段,避免重名字段歧义
        cmd.CommandText = @"SELECT t.teacherid, t.teacherfname, t.teacherlname,
                                 c.classid, c.classname, c.classcode
                          FROM teachers t
                          LEFT JOIN classes c ON t.teacherid = c.teacherid
                          WHERE t.teacherid = @TeacherId;";
        cmd.Parameters.AddWithValue("@TeacherId", TeacherId);
        
        using (MySqlDataReader ResultSet = cmd.ExecuteReader())
        {
            bool hasSetTeacherInfo = false;
            while (ResultSet.Read())
            {
                // 仅首次读取时赋值教师基础信息
                if (!hasSetTeacherInfo)
                {
                    NewTeacher.TeacherId = Convert.ToInt32(ResultSet["teacherid"]);
                    NewTeacher.TeacherFname = ResultSet["teacherfname"].ToString();
                    // 赋值其他教师属性
                    hasSetTeacherInfo = true;
                }

                // 判断是否存在有效课程数据,避免添加空课程
                if (!ResultSet.IsDBNull(ResultSet.GetOrdinal("classid")))
                {
                    Course course = new Course();
                    course.ClassId = Convert.ToInt32(ResultSet["classid"]);
                    course.ClassName = ResultSet["classname"].ToString();
                    // 赋值其他课程属性
                    NewTeacher.Courses.Add(course);
                }
            }
        }
    }
    return NewTeacher;
}

关键说明

  • 使用using语句管理数据库连接和数据读取器,自动释放资源,减少内存泄漏风险。
  • 教师信息仅赋值一次,避免因多课程返回重复赋值的冗余操作。
  • 通过IsDBNull判断课程字段是否为空,确保只有有效课程会被添加到列表中。
  • 明确指定SQL查询字段,避免表中重名字段(如teacherid)导致的读取错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:20:02