-1

我正在用visual basic制作一个投票系统,我正在努力编写正确的查询来识别最大投票数并显示相同的投票数,我的意思是候选人的平局,我如何确定是否有在选举中抽签......这是我的代码

Private Sub president()
    Dim cmd1 As New MySqlCommand("SELECT MAX(VOTECOUNT) as MV FROM candidates WHERE POSITION = 'PRESIDENT'", con)
    Dim rd1 As MySqlDataReader
    con.Open()
    rd1 = cmd1.ExecuteReader()
    If rd1.Read() Then
        MV = rd1("MV").ToString
    End If
    con.Close()
    rd1.Dispose()
    Dim cmd As New MySqlCommand("SELECT CONCAT(FIRSTNAME,' ',MIDDLENAME,' ',LASTNAME) AS FULLNAME,POSITION, VOTECOUNT FROM candidates WHERE POSITION = 'PRESIDENT' AND VOTECOUNT = '" & MV & "'", con)
    Dim rd As MySqlDataReader
    con.Open()
    rd = cmd.ExecuteReader()
    While rd.Read()
        TextBox1.Text = (rd("FULLNAME"))
    End While
    rd.Close()
    con.Close()
4

1 回答 1

0

Using...End Using块确保您的数据库对象已关闭和处置。您可以使用.ExecuteScalar从数据库中获取单个值。这会返回一个Object所以CInt需要一个。我认为您的问题之一是您MV在第二个 Select 语句中用单引号括起来。我确信这是一个整数,而您将它作为字符串传递。使用参数解决了这个问题。

Private Sub president()
    Using con As New MySqlConnection(ConStr),
        cmd1 As New MySqlCommand("SELECT MAX(VOTECOUNT) as MV FROM candidates WHERE POSITION = 'PRESIDENT'", con)
        con.Open()
        Dim MV = CInt(cmd1.ExecuteScalar())
        cmd1.CommandText = "SELECT CONCAT(FIRSTNAME,' ',MIDDLENAME,' ',LASTNAME) AS FULLNAME,POSITION, VOTECOUNT FROM candidates WHERE POSITION = 'PRESIDENT' AND VOTECOUNT = @MV"
        cmd1.Parameters.Add("@MV", MySqlDbType.Int32).Value = MV
        Using rd = cmd1.ExecuteReader()
            While rd.Read()
                TextBox1.AppendText(rd("FULLNAME").ToString & vbCrLf)
            End While
        End Using
    End Using
End Sub
于 2020-12-25T16:09:38.310 回答