我目前正在做多项选择测验,但在本节中遇到了麻烦。我正在尝试从数据库中获取答案,并让它们随机进入单选按钮。到目前为止,我每个人都进入了单选按钮,但是由于我是新手,所以不确定如何将其随机化。
Private Sub Answers()
Dim dr As OleDbDataReader
Dim cm As New OleDbCommand
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login.accdb"
cn.Open()
cm.CommandText = ("SELECT pAns1,pAns2,pAns3,CorrectAns FROM MCQ WHERE QuestionNumber = '" & n & "'")
cm.Connection = cn
dr = cm.ExecuteReader
dr.Read()
RadioButton1.Text = dr.Item("pAns1")
RadioButton2.Text = dr.Item("pAns2")
RadioButton3.Text = dr.Item("pAns3")
RadioButton4.Text = dr.Item("CorrectAns")
End Sub
您可以执行以下操作:
'A class level variable.
Private ReadOnly rand As New Random
Private Sub Answers()
Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login.accdb")
Using cmd As New OleDbCommand("SELECT pAns1, pAns2, pAns3, CorrectAns FROM MCQ WHERE QuestionNumber = ?", cn)
cmd.Parameters.AddWithValue("@QuestionNumber", n)
cn.Open()
Using r As OleDbDataReader = cmd.ExecuteReader
Dim arr = {
r.GetOrdinal("pAns1"),
r.GetOrdinal("pAns2"),
r.GetOrdinal("pAns3")
}.OrderBy(Function(x) rand.Next).ToArray
If r.Read Then
RadioButton1.Text = r.Item(arr(0)).ToString
RadioButton2.Text = r.Item(arr(1)).ToString
RadioButton3.Text = r.Item(arr(2)).ToString
End If
End Using
End Using
End Using
End Sub
请注意:
该代码段尊重上述评论。
您应关闭连接并处理一次性物品。 Using ... End Using
块将为您完成此操作。
对于randomize要求,我们获得序数列以创建整数数组,并<< shuffle内容。您可能想阅读this文章以了解不同的数组shuffling方式。