Han*_*es 2 vb.net oledb ms-access
我目前正在做我的多项选择测验,但在这部分遇到了问题。我正在尝试从数据库中获取答案并将它们随机放入单选按钮中。到目前为止,我让他们每个人都进入了单选按钮,但由于我是新手,我不确定如何随机化它。
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
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以执行以下操作:
'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
Run Code Online (Sandbox Code Playgroud)
请注意:
该代码段尊重上述评论。
您应该关闭连接并处理一次性物品。该Using ... End Using块会为您做到这一点。
对于随机化要求,我们获取列序数以创建一个整数数组并打乱内容。您可能想阅读这篇文章了解不同的数组改组方式。