我没想到这会是一项如此艰巨的任务。
用户参加测验,然后出于任何原因决定重新参加测验。
我们的要求是在将结果插入 SurveyAnswers 表之前删除该用户已经完成的测验结果。
下面的代码旨在删除属于尝试重新参加测验的用户的每个 questionId (qid) 的现有结果,然后插入当前结果。
这应该在一个操作中。
然后,如果当前不存在结果,则插入当前测验的结果。
代码没有插入或删除。
非常感谢您的帮助。
这是我的代码:
Private Sub SaveAnswer(ByVal qid As Integer, ByVal cid As Integer, ByVal ct As String, ByVal cscore As Integer)
Dim al As ArrayList = CType(Session("AnswerList"), ArrayList)
If al Is Nothing Then
Response.Redirect("List.aspx")
End If
Dim cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString)
Dim cmd As New SqlCommand("IF EXISTS(SELECT QuestionId FROM SurveyAnswers WHERE questionId = @qid and UserName = @cuser " & _
"BEGIN delete from SurveyAnswers where UserName=@cuser and QuestionId=@qid " & _
"insert into surveyanswers(QuestionID,ChoiceID,ChoiceText,Username,dateTaken) values(@qid,@cid,@ct,@cuser,getDate()) END " & _
"Else BEGIN insert into surveyanswers(QuestionID,ChoiceID,ChoiceText,Username,dateTaken) values(@qid,@cid,@ct,@cuser,getDate()) END", cnn)
Dim p1 As New SqlParameter("@qid", qid)
Dim p2 As New SqlParameter("@cid", IIf(cid = 0, DBNull.Value, cid))
Dim p3 As New SqlParameter("@ct", IIf(ct = "", DBNull.Value, ct))
Dim p4 As New SqlParameter("@cuser", Session("UserName"))
cmd.Parameters.Add(p1)
cmd.Parameters.Add(p2)
cmd.Parameters.Add(p3)
cmd.Parameters.Add(p4)
cnn.Open()
cmd.ExecuteNonQuery()
cnn.Close()
End Sub