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

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块会为您做到这一点。

  • 对于随机化要求,我们获取列序数以创建一个整数数组并打乱内容。您可能想阅读这篇文章了解不同的数组改组方式。

  • 只是让你知道:[AddWithValue 是邪恶的](http://www.dbdelta.com/addwithvalue-is-evil/),[AddWithValue 是邪恶的!](http://chrisrickard.blogspot.com/2007/06/ addwithvalue-is-evil.html),以及[我们可以停止使用 AddWithValue() 了吗?](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-已添加值/)。 (2认同)
  • @AndrewMorton 同意。无论我是否已经知道,提醒总是好的并且值得赞赏。谢谢你,小伙伴。 (2认同)