Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在用户达到目标后使证书对用户可见_Asp.net_Sql Server_Vb.net_Sql Server 2008 - Fatal编程技术网

Asp.net 在用户达到目标后使证书对用户可见

Asp.net 在用户达到目标后使证书对用户可见,asp.net,sql-server,vb.net,sql-server-2008,Asp.net,Sql Server,Vb.net,Sql Server 2008,我对这个问题很难理解 如果您运行嵌入在下面代码中的查询,它将显示问题总数TotalQuestions asked、正确总数TotalCorrect2和正确百分比Correct2 我们有学生参加视频教程 每堂课结束后,他们都会接受测验,共有30个问题 要通过每节教程,学生必须在测验中获得至少80%的分数 下面的代码正在计算问题总数、总正确率和正确率百分比 这就是我的问题所在 如果一名学生回答了全部30个问题,并且答对了80%或更多的问题,那么将向该学生公开一份证书,以便他/他可以打印他/她的证书

我对这个问题很难理解

如果您运行嵌入在下面代码中的查询,它将显示问题总数TotalQuestions asked、正确总数TotalCorrect2和正确百分比Correct2

我们有学生参加视频教程

每堂课结束后,他们都会接受测验,共有30个问题

要通过每节教程,学生必须在测验中获得至少80%的分数

下面的代码正在计算问题总数、总正确率和正确率百分比

这就是我的问题所在

如果一名学生回答了全部30个问题,并且答对了80%或更多的问题,那么将向该学生公开一份证书,以便他/他可以打印他/她的证书

如果两个条件都不满足,证书将对学生隐藏

我在这项任务的IF部分遇到困难

比如说,

if totalQuestions = 30 and percentCorrect2 >= 80 then

  btnGetUser.Visible = True

else

 btnGetUser.Visible = False

end if

This above is not working.
当我运行代码,并且某个特定用户满足IF语句的条件时,证书应该是公开的。当我在SSMS中运行它时,它会这样做

到目前为止,证书仍然是隐藏的,尽管我正在与参加并通过测试的用户进行测试,并且已经制定了条件

当我调试代码时,我可以看到totalQuestions显示30,这是正确的,但其余显示0

知道我做错了什么吗

Dim s As String = ";WITH Questions AS " & _
       " ( SELECT SQ.QuestionID, " & _
         "   CorrectChoices = COUNT(NULLIF(SC.IsCorrect, 0)), " & _
        "    ChoicesGiven = COUNT(SA.ChoiceID), " & _
       "     CorrectChoicesGiven = COUNT(CASE WHEN SA.ChoiceID IS NOT NULL AND SC.IsCorrect = 1 THEN 1 END), " & _
       "     ExtraChoicesGiven = CASE WHEN COUNT(SA.ChoiceID) > COUNT(NULLIF(SC.IsCorrect, 0)) THEN COUNT(SA.ChoiceID) - COUNT(NULLIF(SC.IsCorrect, 0)) ELSE 0 END " & _
        "  FROM SurveyQuestions SQ " & _
        "  INNER JOIN SurveyChoices SC " & _
        "  ON SQ.QuestionId = SC.QuestionID " & _
        "  LEFT JOIN SurveyAnswers SA " & _ 
        "  ON SA.QuestionId = SC.QuestionID  " & _
        "  AND SA.ChoiceID = SC.ChoiceID " & _
        "  AND SA.UserName = @username " & _
        "  GROUP BY SQ.QuestionID " & _
        " ), QuestionScores AS " & _
        "   (SELECT QuestionID, " & _
        "     Score = CASE WHEN CorrectChoicesGiven - ExtraChoicesGiven < 0 THEN 0 " & _
        "             ELSE CAST(CorrectChoicesGiven - ExtraChoicesGiven AS FLOAT) / CorrectChoices " & _
        "             END, " & _
        "     Score2 = ISNULL(CAST(CorrectChoicesGiven AS FLOAT) / NULLIF(CASE WHEN ChoicesGiven > CorrectChoices THEN ChoicesGiven ELSE CorrectChoices END, 0), 0) " & _
        "    FROM Questions " & _
        "   )
         "   SELECT TotalQuestions = COUNT(*), " & _
         "    TotalCorrect = SUM(Score), " & _
         "    PercentCorrect = CAST(100.0 * SUM(Score) / COUNT(*) AS DECIMAL(5, 2)), " & _
         "    TotalCorrect2 = SUM(Score2), " & _
          "   PercentCorrect2 = CAST(100.0 * SUM(Score2) / COUNT(*) AS DECIMAL(5, 2)) " & _
          "  FROM QuestionScores;"

Dim connStr As String = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString
Dim conn As New SqlConnection(connStr)
Dim cmd As New SqlCommand(s, conn)

Dim TotalQuestions As Integer
Dim TotalCorrect As Double
Dim TotalPercent As Decimal
Dim TotalCorrect2 As Double
Dim TotalPercent2 As Decimal

conn.Open()
cmd.Parameters.AddWithValue("@username", username.Text)
Dim reader As SqlDataReader = cmd.ExecuteReader()

If reader.Read() Then
    TotalQuestions = reader.GetInt32(0)
    TotalCorrect = reader.GetDouble(1)
    TotalPercent = reader.GetDecimal(2)
    TotalCorrect2 = reader.GetDouble(3)
    TotalPercent2 = reader.GetDecimal(4)
End If
reader.Close()
conn.Close()
If TotalQuestions = 30 and TotalPercent2 >= 80 Then
    btnGetUser.Visible = True
Else
    btnGetUser.Visible = False
End If