从 vb.net 中的访问中计算特定记录
Posted
技术标签:
【中文标题】从 vb.net 中的访问中计算特定记录【英文标题】:count the specific record from access in vb.net 【发布时间】:2018-12-19 15:52:49 【问题描述】:所以我正在制作一个投票程序,但我现在卡住了。 我已经搜索了解决方案,并且我已经精确地遵循了它们,但仍然没有结果。
基本上,我想从 Visual Basic 访问中计算每个特定记录的总出现次数。
例如,我有 1 号候选人由 3 人投票,而候选人 2 由 7 人投票,我想在文本框中显示此投票结果,但不知何故它总是显示错误的数字
这是我的代码:
Dim TotalVotes As Integer
myCommand = New OleDbCommand("SELECT CandidateNumber, COUNT (*) FROM Student_Voting GROUP BY CandidateNumber", dbconn)
TotalVotes = myCommand.ExecuteScalar
NovTextBox.Text = TotalVotes
myCommand.Dispose()
myReader.Close()
这里的查询给出的是第一个候选人号码的结果,而不是所选候选人号码的总票数:
SELECT CandidateNumber, COUNT (*) FROM Student_Voting GROUP BY CandidateNumber
我也试过了,结果还是不对:
SELECT COUNT(CandidateNumber) AS NoVotes FROM Student_Voting GROUP BY CandidateNumber
我不知道这里有什么问题,这应该很简单。
如果有人能提供帮助,我将不胜感激。
提前致谢
【问题讨论】:
ExecuteScalar 返回第一行第一列的值。您的第一列是 CandidateNumber,第一行是表中输入的第一行。显然不是你想要的。这就是它不起作用的原因。 【参考方案1】:首先,如果您有多个候选人,您正在运行的初始查询将返回多个记录。 ExecuteScaler 只返回第一行的第一列。
问题是,您想要所有记录还是只想要一个人的记录?如果你只想要一个人的记录,你需要在你的 sql 语句中添加一个 WHERE 子句来指定那个候选人。
如果你想要所有的记录,它看起来像这样:
Using myCommand = New OleDbCommand("SELECT CandidateNumber, COUNT (*) AS CountValue FROM Student_Voting GROUP BY CandidateNumber", dbconn)
Using dr = myCommand.ExecuteReader
' Loops over all the canidate counts one by one.
While dr.Read
Dim totalVotes As Integer = CInt(dr("CountValue"))
Dim candidateNumber As String = dr("CandidateNumber")
End While
End Using
End Using
如果您只想要一条记录,那么您可以使用类似这样的 ExecuteScaler:
Using myCommand = New OleDbCommand("SELECT COUNT (*) AS CountValue FROM Student_Voting WHERE CandidateNumber = @CandidateNumber GROUP BY CandidateNumber", dbconn)
myCommand.Parameters.Add("@CandidateNumber", OleDbType.VarChar).Value = "1"
Dim totalVotes = CInt(myCommand.ExecuteScalar)
End Using
我不知道您的数据库中的实际类型,因此您需要调整 OleDbType 以适合您的表设置,也许还有一些演员表。
【讨论】:
非常感谢您的询问,但为了回答您的问题,我想显示所选候选人的总票数,因此只有一条记录(每位候选人)..而且我想在文本框中显示它所以我将 novtextbox.text = totalVotes 添加到您的代码中,但结果为 0 ..这是图片的链接:link @AliefAchmad 您的 CandidateNumber 在哪里被选中?只需将包含所选数字的变量替换为 1 作为参数值。 如果数据类型是 .VarChar 那么 .Value 应该是“1”以上是关于从 vb.net 中的访问中计算特定记录的主要内容,如果未能解决你的问题,请参考以下文章