2016-04-12 15 views
0

ユーザーにすでにグレードが与えられているかどうかを判断するためのSELECT COUNT問合せがあります。グレードは目に見えなくなります。しかし、私はその学生にグレードを与えても、ボタンはまだ表示されます。デバッグモードで起動すると、クエリの値はnullになります。以下は、メソッドのコードです: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

あなたは

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 

あなたのSQLベースに、次のようにストアドプロシージャにそれを変換しthis-

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; 
     } 
関連する問題