通过Access数据库在RadioButtons中随机化答案

问题描述 投票:0回答:1

我目前正在做多项选择测验,但在本节中遇到了麻烦。我正在尝试从数据库中获取答案,并让它们随机进入单选按钮。到目前为止,我每个人都进入了单选按钮,但是由于我是新手,所以不确定如何将其随机化。

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
vb.net ms-access oledb
1个回答
0
投票

您可以执行以下操作:

'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方式。

© www.soinside.com 2019 - 2024. All rights reserved.