【问题标题】:Why is my ELSE statement being skipped?为什么我的 ELSE 语句被跳过?
【发布时间】:2012-08-30 19:49:04
【问题描述】:

我一直在尝试使用 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”子句中的消息框替换为将使用数据库中的数据填充我的表单的代码。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    那是因为你已经在阅读它了:

    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 括号自动关闭一次性对象。

    【讨论】:

    • 感谢您的帮助。这个建议就像一个魅力 - 多亏了你,我学到了一些新东西。但是在我的情况下,我将如何使用 USING END USING 括号来自动打开和关闭连接?
    • @KismetAgbasi 见Does End Using close an open SQL Connection。另外,学习使用参数。您的 sql 查询对于 sql 注入已经成熟,参数将有助于防止这种情况发生。
    【解决方案2】:

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

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

    【讨论】:

    • 没有机会尝试您的建议以删除“= true”。我尝试了 LarsTech 的另一个建议,它奏效了 - 但无论如何感谢 Beth,我真的很感激。
    猜你喜欢
    • 2017-08-25
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多