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

时间:2012-08-06 18:49:22

标签: c# .net

我创建了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();
       }

它没有任何价值......我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您的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; 
}