VB.NET - Search function using Textbox and Combo Box

17,314

It is not clear why your code doesn't work well. Try to change the code in your Catch clause

MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System")

into

Msgbox(ex.Message.ToString(), MsgBoxStyle.OkOnly, "Project Analysis System")

so you will know what the exact error is.

You can concatenate the value for the ColumnName since it is statically set in your code. But the value on WHERE should be parameterized as it is the one entered by the user.

Try this modified Code,

Private Sub Search()

    lviClientList.Items.Clear()
    Dim item As New ListViewItem()
    Dim _isFound As Boolean = False

    Dim colName() As String = {"code", "Company", "StAdd", "City", "ContactPerson", "Phone", "Mobile", "Email", "Remarks"}

    Dim strSqlSearch As String = "SELECT code, Company, StAdd, City, " & _
                                    "ContactPerson, Phone, Mobile, Email, Remarks " & _
                                    "FROM tblclients " & _
                                    "WHERE " & colName(cboColumns.SelectedIndex) & " LIKE CONCAT('%', @valueName, '%')"

    Using myConn As New MySqlConnection("connectionStringHere")
        Using myComm As New MySqlCommand()
            With myComm
                .Connection = myConn
                .CommandType = CommandType.Text
                .CommandText = strSqlSearch
                .Parameters.AddWithValue("@valueName", txtSearchCriteria.Text);
            End With
            Try
                myConn.Open()
                Dim myReader As MySqlDataReader = myComm.ExecuteReader()

                While myReader.Read()
                    _isFound = True
                    item = lviClientList.Items.Add(myReader("code").ToString)
                    item.SubItems.Add(myReader("Company").ToString)
                    item.SubItems.Add(myReader("StAdd").ToString)
                    item.SubItems.Add(myReader("City").ToString)
                    item.SubItems.Add(myReader("ContactPerson").ToString)
                    item.SubItems.Add(myReader("Phone").ToString)
                    item.SubItems.Add(myReader("Mobile").ToString)
                    item.SubItems.Add(myReader("Email").ToString)
                    item.SubItems.Add(myReader("Remarks").ToString)
                End While

                If Not _isFound Then
                    MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System")
                End If

            Catch ex As MySqlException
                Msgbox(ex.Message.ToString(), MsgBoxStyle.OkOnly, "Project Analysis System")
            End Try
        End Using
    End Using

End Sub
Share:
17,314
Ju-chan
Author by

Ju-chan

A software engineer for a living.

Updated on June 11, 2022

Comments

  • Ju-chan
    Ju-chan almost 2 years

    Good day everyone! I would like to ask for help regarding my code here. The main concern is to search from the MySQL database the keyword provided by a textbox. Here's my GUI for reference.

    The GUI of my program

    When I type my search key on the text box and the selected a column on the combo box, the search query will have its output on the listview. I've tried numerous combinations to gain an output, but to no avail.

    Here's my code for you to help me.

    Private Sub Search()
    
        lviClientList.Items.Clear()
        Dim strSqlSearch As String = "SELECT code, Company, StAdd, City, ContactPerson, Phone, Mobile, Email, Remarks FROM tblclients WHERE '@Column' LIKE '%" & txtSearchCriteria.Text & "%'"
    
        Dim item As New ListViewItem()
    
        If cboColumns.SelectedIndex = 0 Then
            column = "code"
        ElseIf cboColumns.SelectedIndex = 1 Then
            column = "Company"
        ElseIf cboColumns.SelectedIndex = 2 Then
            column = "StAdd"
        ElseIf cboColumns.SelectedIndex = 3 Then
            column = "City"
        ElseIf cboColumns.SelectedIndex = 4 Then
            column = "ContactPerson"
        ElseIf cboColumns.SelectedIndex = 5 Then
            column = "Phone"
        ElseIf cboColumns.SelectedIndex = 6 Then
            column = "Mobile"
        ElseIf cboColumns.SelectedIndex = 7 Then
            column = "Email"
        ElseIf cboColumns.SelectedIndex = 8 Then
            column = "Remarks"
        End If
    
        Dim mysqlCommand As New MySqlCommand(strSqlSearch, mysqlConnection)
        mysqlCommand.Parameters.AddWithValue("@Column", column)
    
        Try
            mysqlConnection.Open()
            mysqlReader = mysqlCommand.ExecuteReader()
    
            Do While mysqlReader.Read()
    
                item = lviClientList.Items.Add(mysqlReader("code").ToString)
                item.SubItems.Add(mysqlReader("Company").ToString)
                item.SubItems.Add(mysqlReader("StAdd").ToString)
                item.SubItems.Add(mysqlReader("City").ToString)
                item.SubItems.Add(mysqlReader("ContactPerson").ToString)
                item.SubItems.Add(mysqlReader("Phone").ToString)
                item.SubItems.Add(mysqlReader("Mobile").ToString)
                item.SubItems.Add(mysqlReader("Email").ToString)
                item.SubItems.Add(mysqlReader("Remarks").ToString)
    
            Loop
    
        Catch ex As Exception
    
            MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System")
    
        Finally
    
            mysqlReader.Close()
            mysqlConnection.Close()
    
        End Try
    
    End Sub