Посчитать конкретную запись из доступа в vb.net
Так что я делаю программу голосования, но я застрял прямо сейчас. Я искал решения, и я точно следовал им, но до сих пор не дал результата.
По сути, я хочу посчитать общее вхождение для каждой конкретной записи из доступа в Visual Basic.
Например, у меня есть кандидат № 1, за которого проголосовали три человека, а кандидат-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
Я не знаю, в чем здесь проблема, это должно быть просто, но пока.
Если бы кто-то мог помочь, я был бы очень признателен.
заранее спасибо
1 ответ
Прежде всего, исходный запрос, который вы выполняете, вернет более одной записи, если у вас будет более одного кандидата. ExecuteScaler возвращает только первый столбец первой строки.
Вопрос в том, хотите ли вы все записи или просто запись одного человека? Если вам нужна запись только одного человека, вам нужно добавить предложение WHERE в оператор SQL, чтобы указать этого кандидата.
Если вы хотите, чтобы все записи выглядели примерно так:
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, чтобы он соответствовал настройке вашей таблицы и, возможно, некоторым кастам.