【发布时间】:2015-11-12 22:49:08
【问题描述】:
我有一个通过传入学生班级列表来检索学生成绩的列表,
然后它通过在数据库中查询学生的姓名来提取学生的成绩。这段代码工作正常,但是当 studentList 的大小增加时,这段代码执行起来很慢,
通过 sql 查询循环列表的正确方法是什么?
private List<StudentClass> getStudentGrades(List<StudentClass> studentList)
{
for (int i =0; i < studentList.Count; i++)
{
string sqlcommand = "SELECT StudentGrades FROM Students WHERE StudentName=@StudentName";
conn.Open();
using (SqlCommand cmd = new SqlCommand(sqlcommand, conn))
{
cmd.Parameters.AddWithValue("@StudentName", studentList[i].StudentName);
cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Reader())
{
studentList[i].StudentGrades = int.Parse(reader["StudentGrades"].ToString());
}
}
}
return studentList;
}
public class StudentClass
{
public string StudentName {get; set; }
public int StudentGrades {get; set; }
}
【问题讨论】:
-
速度慢的原因是它为每个学生调用了一个新查询。发送学生列表并进行基于单个集合的查询会更好。您可能还想看看这个。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
-
cmd.ExecuteNonQuery();没用,只是删除它 -
觉得 -1 对这个问题有点苛刻
标签: c# mysql sql-server