2014-05-17 5 views
0

Je crée un système de questions à choix multiple. Jusqu'à présent, je crée ces 4 tables et 1 vue.Passer un tableau dans le tableau

Les tables sont tblQuestion, tblAnswer, tblQuiz, tblResult et tblResultDetail. tblQuestion est de stocker les questions, tblAnswer pour stocker les réponses de la question, tblResult est d'enregistrer pour chaque utilisateur qui répond au quiz, et stocker les réponses des utilisateurs dans TblResultDetails. Selon le code ci-dessous, les données sont lues à partir de la vue.

(questiondr.Read). J'utilise 1, 2, 3, 4 car c'est le nom de la colonne de la vue. Je l'ai fait pour randomiser les réponses.

Dim MyArray(3) As String 
    Dim commd As New SqlCommand("Select * From view_Question Where [email protected]", conn) 
    commd.Parameters.AddWithValue("@IdQuestion", count) 
    Dim questiondr As SqlDataReader 
    questiondr = commd.ExecuteReader 


If questiondr.Read() Then 
    Me.lblTitle.Text = questiondr("txtQuestion") 

    Me.ansrb1.Text = questiondr("1") 
    MyArray(0) = questiondr("1") 

    Me.ansrb2.Text = questiondr("2") 
    MyArray(1) = questiondr("2") 

    Me.ansrb3.Text = questiondr("3") 
    MyArray(2) = questiondr("3") 

    Me.ansrb4.Text = questiondr("4") 
    MyArray(3) = questiondr("4") 


    Dim userAns As String 

    If Me.ansrb1.Checked = True Then 
     userAns = MyArray(0) 
    ElseIf Me.ansrb2.Checked = True Then 
     answerId = MyArray(1) 
    ElseIf Me.ansrb3.Checked = True Then 
     userAns = MyArray(2) 
    ElseIf Me.ansrb4.Checked = True Then 
     userAns = MyArray(3) 
    End If 

End If 
conn.Close() 

End Sub

Et le problème est, comment transmettre les réponses des utilisateurs dans tblResultDetails de table?

+0

Off-by-one, array nécessite 4 éléments. – Steve

+0

que voulez-vous dire par là? pouvez-vous expliquer plus? – luly

+0

'Dim MyArray (3) As String' est un tableau qui ne peut contenir que 3 chaînes (index de 0 à 2). Vous avez besoin de 'Dim MyArray (4) As String' pour stocker 4 chaînes (index de 0 à 3). Avec seulement 3 éléments, lorsque votre code essaie d'utiliser l'index 3, vous recevrez une exception Index Out Of Range lors de l'exécution. Cette situation est appelée 'off-by-one' [Voir Wikipedia] (http://en.wikipedia.org/wiki/Off-by-one_error) – Steve

Répondre

0

Supposant que tblResultDetails contient un champ pour le userid, un champ pour le questionid et un champ pour la réponse donnée par cet utilisateur particulier à cette question particulière alors vous besoin de quelque chose comme ça

Dim cmdText = "INSERT INTO tblResultDetails VALUES (@userid, @questionid, @answerid)" 
Dim cmd = new SqlCommand(cmdText, connection) 
cmd.Parameters.AddWithValue("@userid", yourCurrentUserIDValue) 
cmd.Parameters.AddWithValue("@questionid", yourCurrentQuestionIDValue) 
cmd.Parameters.AddWithValue("@answerid", userAns) 
cmd.ExecuteNonQuery() 

Comme vous pouvez voir c'est assez simple si vous avez stocké quelque part les deux informations manquantes (userid et questionid)

+0

J'ai essayé ce code et il y a une erreur qui est la chaîne d'entrée n'était pas dans un format correct – luly