2016-08-04 57 views
-1

我想总的记录“时间”值的回报从我的SQL数据库我想这个代码表“课程”,但它不工作:总值记录从SQL数据库

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

欢迎来到Stack Overflow!你能详细说明你的代码“不起作用”吗?你在期待什么,究竟发生了什么?如果您遇到异常/错误,请发布其发生的行和异常/错误的详细信息。请[编辑]这些细节或我们可能无法提供帮助。 – FrankerZ

回答

0

您没有为您的sql命令cmd2指定连接。 试试这个。

SqlCommand cmd2 = new SqlCommand("Select sum(hours) as totalHours from Courses",con2); 
Label3.Text = cmd2.ExexcuteScalar().ToString(); 
0

代码中存在两个问题:在while (rdr.Read())中循环遍历结果集的所有行,并在第一个查询中执行Select sum(hours)...多少行。

取决于需求,你可能想要做的,而不是ifwhile

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(); 
} 
+0

所以'cmd2.ToString();'会执行查询并将结果赋给'Label3.Text',如果您将if(rdr.Read())'放在while中,不是吗? –

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

希望它能帮上忙。