2016-04-12 41 views
0

我有一个SELECT COUNT查询用于确定用户是否已经被授予了成绩,如果该特定用户已经有一个成绩,等级将变得不可见。然而,即使我给了那个学生一个等级,按钮仍然会出现。当我在调试模式下启动时,查询的值为空。下面是该方法的代码:SELECT COUNT查询不会产生我期待的结果

String connectionString = WebConfigurationManager.ConnectionStrings["UniString"].ConnectionString; 
    SqlConnection myConnection = new SqlConnection(connectionString); 

    myConnection.Open(); 
    String modOnpwayModID = "SELECT id FROM module_on_pathway WHERE module_id = '" + modDropDown.SelectedValue + "'"; 
    SqlCommand modOnpwayModIDQuerycmd = new SqlCommand(modOnpwayModID, myConnection); 
    Int32 modOnpwayModIDResult = Convert.ToInt32(modOnpwayModIDQuerycmd.ExecuteScalar().ToString()); 
    Label lb = (Label)e.Item.FindControl("user_idLabel"); 
    String userIDLabel = lb.Text.ToString(); 
    Int32 usrIDVal = Convert.ToInt32(userIDLabel); 

    String gradeSelectionQuery = "SELECT COUNT(student_module_grade.grade) FROM student_module_grade INNER JOIN classlist ON student_module_grade.classlist_id = classlist.classlist_id INNER JOIN student_assignment_grade ON student_module_grade.classlist_id = student_assignment_grade.classlist_id INNER JOIN assignments ON student_assignment_grade.assignment_id = assignments.assignment_id WHERE student_module_grade.module_on_pathway_id ='" + modOnpwayModIDResult + "'AND classlist.user_id = '" + userIDLabel + "'"; 


    SqlCommand gradeSelectionQuerycmd = new SqlCommand(gradeSelectionQuery, myConnection); 
    Int32 gradeCount = Convert.ToInt32(gradeSelectionQuerycmd.ExecuteScalar().ToString()); 

    //See if a final score has been given already- can then be changed by the admin if it needs to be changed 
    if (gradeCount == 0) 
    { 

     submitmodMark1st.Visible = true; 

     //All elements for grade submission made invisible- admin will be unable to change the grade 
     //TB.Visible = false; 
     //changedFlagVal.Text = "The grade for this module has already been changed for the selected student"; 
     //changedFlagVal.Visible = true; 
     //changedFlagVal.ForeColor = System.Drawing.Color.Red; 

    } 

    else 
    { 

     submitmodMark1st.Visible = false; 
    } 

String repeatGradeSelectionQuery = "SELECT COUNT(student_module_repeat_grades.grade) FROM student_module_repeat_grades INNER JOIN classlist ON student_module_repeat_grades.classlist_id = classlist.classlist_id INNER JOIN student_assignment_grade ON student_module_repeat_grades.classlist_id = student_assignment_grade.classlist_id INNER JOIN assignments ON student_assignment_grade.assignment_id = assignments.assignment_id WHERE student_module_repeat_grades.module_on_pathway_id ='" + modOnpwayModIDResult + "'AND classlist.user_id = '" + userIDLabel + "'"; 
    SqlCommand repeatGradeSelectionQuerycmd = new SqlCommand(repeatGradeSelectionQuery, myConnection); 
    Int32 repeatGradeCount = Convert.ToInt32(repeatGradeSelectionQuerycmd.ExecuteScalar().ToString()); 

    if (repeatGradeCount == 0) 
    { 

     submitmodMark1st.Visible = true; 

      } 

      else 
      { 

       //All elements for grade submission made invisible- admin will be unable to change the grade 
       //TB.Visible = false; 
       changedFlagVal.Text = "The grade for this module has already been changed for the selected student"; 
       changedFlagVal.Visible = true; 
       changedFlagVal.ForeColor = System.Drawing.Color.Red; 
       submitmodMark1st.Visible = false; 
      } 
+2

太多不相关的代码;你能否只发布必要的代码 –

+1

你真的应该考虑使用sql参数,而不是将值连接到你的SQL查询中。 – juharr

+0

@juharr你认为使用这些连接值可能是问题的原因吗?在 – Spiros

回答

0

你可以转换到这一点这样的存储过程在SQL-

CREATE PROC getCountStudentModule @pathwayId int, @userID int 

AS 

BEGIN 

SELECT COUNT(student_module_repeat_grades.grade) AS CntRepeatGrades 
FROM student_module_repeat_grades 
    INNER JOIN classlist 
     ON student_module_repeat_grades.classlist_id = classlist.classlist_id 
    INNER JOIN student_assignment_grade 
     ON student_module_repeat_grades.classlist_id = student_assignment_grade.classlist_id 
    INNER JOIN assignments 
     ON student_assignment_grade.assignment_id = assignments.assignment_id 
WHERE student_module_repeat_grades.module_on_pathway_id = @pathwayId 
AND classlist.user_id = @userID 

END 

GO 

然后像做这个 -

public bool CheckStatus() 
    { 
     bool status = false; 

     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      SqlCommand cmd = new SqlCommand("getCountStudentModule", con); 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.AddWithValue("@pathwayid", modOnpwayModIDResult); 
      cmd.Parameters.AddWithValue("@userID", userIDLabel); 
      con.Open(); 
      cmd.ExecuteNonQuery(); 

      SqlDataReader rdr = cmd.ExecuteReader(); 
      if (rdr.HasRows) 
      { 
       while (rdr.Read()) 
       { 
        string active = rdr["CntRepeatGrades"].ToString(); 

        if (active == "0") 
        { 
         status = true; 

        } 

        else 
        { 
         status = false; 
        } 
       } 
      } 



      return status; 
     } 

    } 

然后你可以做这样的检查你的按钮 -

bool status = CheckStatus(); 

     if (status) 
     { 

      submitmodMark1st.Visible = true; 

     } 

     else 
     { 

      //All elements for grade submission made invisible- admin will be unable to change the grade 
      //TB.Visible = false; 
      changedFlagVal.Text = "The grade for this module has already been changed for the selected student"; 
      changedFlagVal.Visible = true; 
      changedFlagVal.ForeColor = System.Drawing.Color.Red; 
      submitmodMark1st.Visible = false; 
     } 
相关问题