我在Windows窗体应用程序中有两个类。比方说Student
,StudentDetails
在哪里,该类StudentDetails
也是类的属性Student
。
我有一个存储过程,该过程从数据库的两个表中获取数据。我需要知道通常如何处理这种情况,这意味着通常如何填充学生班级。非常感谢你的回答。与类似情况的任何链接都很棒。
这是我的代码:
class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public StudentDetails StudentDetails { get; set; }
public Student()
{
this.StudentID = 0;
this.StudentName = String.Empty;
this.StudentDetails = new StudentDetails();
}
}
class StudentDetails
{
public int StudentDetailsID { get; set; }
public string Address { get; set; }
public int Height { get; set; }
public int Weight { get; set; }
public StudentDetails()
{
this.StudentDetailsID = 0;
this.Address = String.Empty;
this.Height = 0;
this.Weight = 0;
}
}
下面的类具有填充学生类的函数(FillStudent())
Class StudentAssembler
{
public List<Model.Student> FillStudent()
{
List<Model.Student> StudentCollection = new List<Model.Student>();
Model.Student StudentDTO = new Model.Student();
try
{
using (Model.dbConnection dbconnection = new Model.dbConnection(Utilities.SqlConnStr))
{
SqlDataReader dr;
SqlCommand command = new SqlCommand("GetStudents", dbconnection.connection);
command.CommandType = CommandType.StoredProcedure;
dbconnection.OpenConn();
dr = command.ExecuteReader();
while (dr.Read())
{
StudentDTO.StudentID = dr[0] == DBNull.Value ? 0 : (int)dr[0];
StudentDTO.StudentName = dr[1] == DBNull.Value ? String.Empty : (String)dr[1];
//this is the part that i need to know how is it usually handled
//StudentDTO.StudentDetails = how to fill out this part ???
StudentCollection.Add(StudentDTO);
}
return StudentCollection;
}
}
catch (Exception)
{
return null;
}
}
}
编辑:
存储过程代码
select s.StudentID,s.StudentName,sd.StudentDetailsID,sd.Address,
sd.Height,sd.Weight
from Student s,StudentDetails sd
where s.StudentID = sd.StudentID
你有两个选择
1:一个单独的sproc(或sql),以按StudentID从学生详细信息表中获取信息。每个学生都称这个
2:在您的sproc / sql中加入学生详细信息表,并使用相同的数据行填充两者
选择1:通常更清洁,更可重用。我想说这应该是您的第一种方法。
但是,如果您需要找很多学生,则选项2会快得多。因为它只需要对数据库的一个调用。
另外,您似乎与学生和studendetails之间是1:1的关系,因此没有理由不使用选项2。但是,如果您对一位学生有很多详细信息,您仍然可以使用选项2,跳过重复的学生信息。即使您返回的数据比sql所需的数据多,这通常也是最好的方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句