2012-09-30 13 views
5

Dzień dobry wszystkim! Chciałbym prosić o pomoc dotyczącą mojego kodu tutaj. Głównym problemem jest wyszukiwanie z bazy danych MySQL słowa kluczowego dostarczonego przez pole tekstowe. Oto mój GUI dla odniesienia.VB.NET - Funkcja wyszukiwania przy użyciu pola tekstowego i kombinowanego

The GUI of my program

Po wpisaniu mojego klucza wyszukiwania w polu tekstowym i wybranej kolumny w polu kombi, wyszukiwane będą miały swoje wyjście na ListView. Próbowałem wielu kombinacji, aby uzyskać wyjście, ale bez skutku.

Oto mój kod, aby mi pomóc.

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 

Odpowiedz

3

Nie jest jasne, dlaczego twój kod nie działa dobrze. Spróbuj zmienić kod w swoim Catch klauzuli

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

do

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

więc będziesz wiedział, co jest dokładny błąd.

Można połączyć wartość dla ColumnName, ponieważ jest ustawiona statycznie w kodzie. Ale wartość na WHERE powinna być sparametryzowana, ponieważ jest to ta wprowadzona przez użytkownika.

Spróbuj zmodyfikowany kod,

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 
+0

Postaram kodu. :) –

+0

jeśli wystąpił jakikolwiek błąd, proszę, po to tutaj dzięki: D –

+1

Hej, zadziałało! Wielkie dzięki, proszę pana. –

Powiązane problemy