Посчитать конкретную запись из доступа в 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, чтобы он соответствовал настройке вашей таблицы и, возможно, некоторым кастам.

Другие вопросы по тегам