【发布时间】:2021-12-29 15:38:21
【问题描述】:
我正在尝试使用 C# Web 应用程序中的 SQL 查询为单个“教师”收集多个“班级 ID”。我已经能够成功链接查询中的表,但我只收到每位教师教授的一门课程,即使数据库中有一位教师教授多门课程。
这是我生成 SQL 查询并发布信息的代码:
public Teacher FindTeacher(int TeacherId)
{
MySqlConnection Conn = School.AccessDatabase();
Conn.Open();
MySqlCommand cmd = Conn.CreateCommand();
cmd.CommandText = "Select * from Teachers, Classes where teachers.teacherid = " + TeacherId;
MySqlDataReader ResultSet = cmd.ExecuteReader();
Teacher SelectedTeacher = new Teacher();
while (ResultSet.Read())
{
int Id = Convert.ToInt32(ResultSet["teacherid"]);
string TeacherFName = ResultSet["teacherfname"].ToString();
string TeacherLName = ResultSet["teacherlname"].ToString();
string TaughtClassName = ResultSet["classname"].ToString();
string TaughtClassCode = ResultSet["classcode"].ToString();
SelectedTeacher.TeacherId = Id;
SelectedTeacher.TeacherFName = TeacherFName;
SelectedTeacher.TeacherLName = TeacherLName;
SelectedTeacher.TaughtClassCode = TaughtClassCode;
SelectedTeacher.TaughtClassName = TaughtClassName;
}
编辑: 感谢您到目前为止的帮助,我对此很陌生所以我很感激您的帮助。 我已将语法更改为 INNER JOIN,但仍然没有得到所需的输出;我希望输出是这样的:“史密斯先生教 A 类和 B 类”,其中“A 类”和“B 类”都是从数据库中获取的。 这是我更新的代码:
//Set up and define query for DB
MySqlCommand cmd = Conn.CreateCommand();
cmd.CommandText = "Select * from Teachers Join Classes on teachers.teacherid = classes.teacherid where teachers.teacherid=" + TeacherId;
//Collect query result in a variable
MySqlDataReader ResultSet = cmd.ExecuteReader();
//Create a variable in which to store the current teacher
Teacher SelectedTeacher = new Teacher();
//go through each row of the query result
while (ResultSet.Read())
{
int Id = Convert.ToInt32(ResultSet["teacherid"]);
string TeacherFName = ResultSet["teacherfname"].ToString();
string TeacherLName = ResultSet["teacherlname"].ToString();
string TaughtClassName = ResultSet["classname"].ToString();
string TaughtClassCode = ResultSet["classcode"].ToString();
SelectedTeacher.TeacherId = Id;
SelectedTeacher.TeacherFName = TeacherFName;
SelectedTeacher.TeacherLName = TeacherLName;
SelectedTeacher.TaughtClassCode = TaughtClassCode;
SelectedTeacher.TaughtClassName = TaughtClassName;
}
【问题讨论】:
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
该查询对两个表(所有教师与所有班级配对)进行交叉连接,然后将行减少到只有一位教师与所有班级配对。再看看结果。然后接受jarlh 的建议。
FROM table_a, table_b语法应该被根除。 -
另外,您在所有
MySql对象上都缺少using语句,并且您在这里有 SQL 注入,您应该改为参数化