我想从我的sql数据库中的“Courses”表中返回记录“hours”中的值的总和我尝试了这段代码但它不起作用:
SqlCommand cmd = new SqlCommand("Select Courses.hours from Courses inner join Sched on Courses.Id = Sched.SCourses ", con2);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
SqlCommand cmd2 = new SqlCommand("Select sum(hours) as totalHours from Courses");
Label3.Text = cmd2.ToString();
}
答案 0 :(得分:0)
代码中存在两个问题:执行while (rdr.Read())
循环遍历结果集的所有行,并执行Select sum(hours)...
,这是您在第一个查询中获得的行数的多倍。
取决于要求,您可能希望if
代替while
if (rdr.Read())
接下来,cmd2.ToString();
将不会输出查询结果。您应该像第一种情况一样使用ExecuteReader
,或者使用ExecuteScalar
if (rdr.Read())
{
SqlCommand cmd2 = new SqlCommand("Select sum(hours) as totalHours from Courses", con2);
Label3.Text = cmd2.ExecuteScalar().ToString();
}
答案 1 :(得分:0)
为什么要使用单独的查询来计算您的工作时间。使用group by
子句并只运行一次。
SqlCommand cmd = new SqlCommand("Select Courses.id, Sum(Courses.hours) from Courses inner join Sched on Courses.Id = Sched.SCourses group by Course.id")
SqlDataReader rdr = cmd.ExecuteReader();
Label3.Text = cmd.ExecuteScalar().ToString();
希望它会有所帮助。
答案 2 :(得分:0)
未指定sql命令cmd2的连接。 试试这个。
SqlCommand cmd2 = new SqlCommand("Select sum(hours) as totalHours from Courses",con2);
Label3.Text = cmd2.ExexcuteScalar().ToString();