1

我一直在尝试使用 IF/ELSE 语句来查询我的 MySQL 数据库,但似乎无法弄清楚为什么 ELSE 语句被 VB 忽略了。这是代码 - 任何帮助将不胜感激:

dbConn = New MySqlConnection("Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=qwertyuiop;Password=lkjhgfdsa;Database=zxcvbnm")
    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() = True Then
            MessageBox.Show("Customer Account Found!")
        Else
            MessageBox.Show("No Customer Records Found!  Please try again!")
            dbData.Close()
        End If
    End While

我的意图是用将用数据库中的数据填充我的表单的代码替换“IF”子句中的消息框。

4

2 回答 2

3

那是因为您已经在阅读它:

While dbData.Read()
  If dbData.HasRows() = True Then
    MessageBox.Show("Customer Account Found!")
  Else
    MessageBox.Show("No Customer Records Found!  Please try again!")
    dbData.Close()
  End If
End While

如果您的阅读器没有记录,则将跳过整个 While 循环。

换个方式试试:

If dbData.HasRows Then
  While dbData.Read()
    'looping through records here
  End While
Else
  MessageBox.Show("No Customer Records Found!  Please try again!")
End If

还有一个强制性的说明:不要让你的连接保持开放和活跃。使用Using End Using支架自动关闭一次性物品。

于 2012-08-30T19:55:03.670 回答
0

我不会说它跳过了你的 else 子句,但它可能会以不同于你期望的方式评估你的 if 条件。

就个人而言,我不喜欢将任何东西与 True 进行比较。如果你放弃了= true,它会起作用吗?

于 2012-08-30T19:54:52.617 回答