我创建了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();
}
它没有任何价值......我怎么能这样做?
答案 0 :(得分:1)
如果您的SELECT
语句未返回任何行,则说明您的数据存在问题。 EnrollmentTable.StudentID
与Student
表中的任何记录都不匹配,或者EnrollmentTable.CourseID
与Course
表中的任何课程都不匹配。
无论如何,我试图简化代码,以便更容易阅读:
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;
}