2012-09-30 18 views
5

Guten Tag alle! Ich möchte hier um Hilfe zu meinem Code bitten. Das Hauptproblem besteht darin, das von einer Textbox bereitgestellte Schlüsselwort aus der MySQL-Datenbank zu suchen. Hier ist meine GUI als Referenz.VB.NET - Suchfunktion mit Textbox und Combobox

The GUI of my program

Wenn ich meine Suchschlüssel auf dem Textfeld und die ausgewählten eine Spalte auf der Combo-Box, die Suchabfrage wird die Ausgabe auf Listenansicht eingeben muß. Ich habe zahlreiche Kombinationen ausprobiert, um eine Ausgabe zu erhalten, aber ohne Erfolg.

Hier ist mein Code für Sie, mir zu helfen.

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 

Antwort

3

Es ist nicht klar, warum Ihr Code nicht gut funktioniert. Versuchen Sie den Code in Ihre Catch Klausel

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

in

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

zu ändern, so dass Sie wissen, was die genaue Fehler ist.

Sie können den Wert für ColumnName verketten, da dieser in Ihrem Code statisch festgelegt ist. Der Wert WHERE sollte jedoch so parametriert werden, wie er vom Benutzer eingegeben wurde.

Versuchen Sie, diese modifizierte 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 
+0

ich Ihren Code versuchen werde. :) –

+0

wenn ein Fehler aufgetreten ist, bitte poste es hier Danke: D –

+1

Hey, es hat funktioniert! Vielen Dank Herr. –