通过 Access 数据库随机化 RadioButtons 中的答案
Posted
技术标签:
【中文标题】通过 Access 数据库随机化 RadioButtons 中的答案【英文标题】:Randomize answers in RadioButtons through Access database 【发布时间】:2019-12-21 20:36:36 【问题描述】:我目前正在做多项选择测验,但在这部分遇到了问题。我正在尝试从数据库中获取答案并让它们随机进入单选按钮。到目前为止,我让它们中的每一个都进入单选按钮,但由于我是新手,我不确定如何随机化它。
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
【问题讨论】:
我明白了,仍然存在 sql 注入问题。这重要! 有两种安全问题太重要了,永远不能以错误的方式处理......即使对于学校的学习项目也是如此。其中之一是密码处理。 永远不要以纯文本形式存储密码,即使是在为学校布置作业时也是如此。 (即使加密也不够好。)另一个是sql注入。 在要求您构建类似的东西之前,讲师应该向您展示参数化查询。 查看OleDbParameter
类型和OleDbCommand.Parameters
属性。
@JoelCoehoorn:请放松。你甚至不知道变量n
的来源。参数的使用当然是首选,但最常见的原因是 SQL 注入以外的其他原因,尤其是在接触不允许嵌套 SQL 语句的 Access SQL 时。
请开启 Option Strict。这是一个两部分的过程。首先对于当前项目 - 在解决方案资源管理器中双击我的项目。选择左侧的编译。在 Option Strict 下拉列表中选择 ON。未来项目的第二个 - 转到工具菜单 -> 选项 -> 项目和解决方案 -> VB 默认值。在 Option Strict 下拉列表中选择 ON。这将使您避免在运行时出现错误。
【参考方案1】:
你可以这样做:
'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
请注意:
sn-p 尊重上述 cmets。
您应该关闭连接并处理一次性对象。 Using ... End Using
块将为您做到这一点。
对于 randomize 要求,我们获取列序数以创建整数数组并 shuffle 内容。您可能想阅读this 帖子以了解不同的数组改组 方式。
【讨论】:
请注意:AddWithValue is Evil、AddWithValue is evil! 和 Can we stop using AddWithValue() already?。 @AndrewMorton 同意。不管我是否已经知道,提醒总是好的和感激的。谢谢你的朋友。以上是关于通过 Access 数据库随机化 RadioButtons 中的答案的主要内容,如果未能解决你的问题,请参考以下文章