0

我有一个嵌入式 IF 语句,应该在数据库查询之后执行。但是,我注意到在运行时根本没有评估整个语句(紧随其后的那个While dbData.Read())。我究竟做错了什么?

这是代码:

Private Sub ButtonNew_Click(ByVal sender As System.Object, ByVal e As     System.EventArgs) Handles ButtonNew.Click

If TextBoxSearch.Text = "" Then
        MessageBox.Show("Sorry, you must enter an ACCOUNT# before proceeding!")
        TextBoxSearch.Focus()
    Else
        Try
            Dim dbConn As MySqlConnection
            dbConn = New MySqlConnection("Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=parts;Password=parts;Database=accounting")
            Dim account As Boolean = True
            If dbConn.State = ConnectionState.Open Then
                dbConn.Close()
            End If
            dbConn.Open()
            Dim dbQuery As String = "SELECT * FROM customer WHERE accountNumber = '" & TextBoxSearch.Text & "';"
            Dim dbData As MySqlDataReader
            Dim dbAdapter As New MySqlDataAdapter
            Dim dbCmd As New MySqlCommand
            dbCmd.CommandText = dbQuery
            dbCmd.Connection = dbConn
            dbAdapter.SelectCommand = dbCmd
            dbData = dbCmd.ExecuteReader
            While dbData.Read()
                If dbData.HasRows Then
                    'MessageBox.Show("Customer record already exists!")
                    Call recordExists()
                    account = False
                    Call lockForm()
                    TextBoxSearch.Focus()
                    Me.Refresh()
                Else
                    'dbData.Close()
                    account = True
                    TextBoxAccount.Text = TextBoxSearch.Text
                    TextBoxAccount.BackColor = Color.LightGray
                    TextBoxAccount.TabStop = False
                    Call unlockForm()
                    TextBoxLastName.Focus()
                    ButtonSubmit.Visible = True
                    Me.Refresh()
                End If
            End While
            dbData.Close()
            dbCmd.Dispose()
            dbAdapter.Dispose()
            dbConn.Close()
        Catch ex As Exception
            MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
                        vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
        End Try
    End If

End Sub
4

1 回答 1

1

如果dbData.Read()返回False,则它不会进入您的循环,因此该If语句将不会被执行。如果没有要读取的行,则Read始终返回False,因此该If语句在其所在的位置是无用的。您需要将该If语句向上移动,以便 while 循环位于If块内:

If dbData.HasRows Then
    While dbData.Read()
        ' ...
    End While
Else
    ' ...
End If
于 2012-10-11T18:55:57.957 回答