如何从另一个对象中的一个对象检索数据

本文关键字:一个对象 检索 数据 | 更新日期: 2024-11-06 15:29:55

我创建 3 个类,然后将这 3 个类的对象在另一个类中创建。现在我想从数据库中读取数据。我的代码是:我正在从数据库中检索数据并从组合框中调用。

       SqlConnection conn = MyDB.GetConnection();
       string selectStm = "SELECT c.CourseID,en.Score,s.StudentID FROM EnrollmentTable en,Course c,Student s WHERE en.StudentID = s.StudentID AND en.CourseID = c.CourseID";
       SqlCommand command = new SqlCommand(selectStm, conn);
       //command.Parameters.AddWithValue("@StudentID", StudentID);

       List<StudentScore> aStudentScore = new List<StudentScore>();
       StudentScore score = null;

       try
       {
           conn.Open();
           SqlDataReader reader = command.ExecuteReader();

           Enrollment enr = new Enrollment();
           while (reader.Read())
           {
               score = new StudentScore();

               score.EnrollmentData.StudentData.StudentID = reader["StudentID"].ToString();//Here is the problem.
               score.EnrollmentData.CourseData.CourseID = reader["CourseID"].ToString();//Here is the problem.
               score.Score = Convert.ToInt32(reader["Score"]);

               aStudentScore.Add(score);
           }
           reader.Close();
           return aStudentScore;
       }
       catch (SqlException ex)
       {
           throw ex;
       }
       finally
       {
           conn.Close();
       }

它不需要任何价值。我该怎么做?

如何从另一个对象中的一个对象检索数据

如果 SELECT 语句未返回任何行,则数据存在问题。 EnrollmentTable.StudentIDStudent表中的任何记录都不匹配,或者EnrollmentTable.CourseIDCourse表中的任何课程都不匹配。

无论如何,我试图简化代码,以便更容易阅读:

public class Student
{
    string studentID = string.Empty;
    public string StudentID
    {get { return studentID;}
     set { studentID = value;}}
};
public class Course
{
    string courseID = string.Empty;
    public string CourseID
    {get { return courseID;}
     set { courseID = value;}}
};
public class Enrollment
{
    Student studentData = new Student();
    public Student StudentData
    {get { return studentData;}
     set { studentData = value;}
    }
    Course courseData = new Course();
    public Course CourseData
    {get { return courseData; }
     set { courseData = value; }}
};
public class StudentScore
{
    Enrollment enrollmentData = new Enrollment();
    public Enrollment EnrollmentData
    {get { return enrollmentData;}
     set { enrollmentData = value;}}
    int score = 0;
    public int Score
    {get {return score;}
     set {score = value;}}
};
public List<StudentScore> getScoreList()
{
    List<StudentScore> aStudentScore = new List<StudentScore>();
    StringBuilder tmpSQL = new StringBuilder();
    tmpSQL.Append("SELECT c.CourseID, en.Score, s.StudentID ");
    tmpSQL.Append("FROM EnrollmentTable en ");
    tmpSQL.Append("       INNER JOIN Student s ON en.StudentID = s.StudentID ");
    tmpSQL.Append("       INNER JOIN Course c ON en.CourseID = c.CourseID ");
    try
    {using (SqlConnection conn = MyDB.GetConnection()){
       conn.Open();
       using (SqlCommand command = new SqlCommand(tmpSQL.ToString(), conn)){
         using (SqlDataReader reader = command.ExecuteReader()){
           while (reader.Read())
             {
              StudentScore score = new StudentScore();
              score.EnrollmentData.StudentData.StudentID = reader["StudentID"].ToString();
              score.EnrollmentData.CourseData.CourseID = reader["CourseID"].ToString();
              score.Score = Convert.ToInt32(reader["Score"]);
              aStudentScore.Add(score);
              };
            };
         };
      };
    }
    catch (Exception ex)
    {throw ex;}
    return aStudentScore; 
}