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 に答える