从sql数据库记录的值总数

时间:2016-08-04 07:19:44

标签: c# sql

我想从我的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();
}

3 个答案:

答案 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();