2012-09-30 22 views
5

¡Buenos días a todos! Me gustaría pedir ayuda con respecto a mi código aquí. La principal preocupación es buscar desde la base de datos MySQL la palabra clave proporcionada por un cuadro de texto. Aquí está mi GUI para referencia.VB.NET - Función de búsqueda usando Textbox y cuadro combinado

The GUI of my program

Cuando escribo mi clave de búsqueda en el cuadro de texto y el seleccionado una columna en el cuadro combinado, la consulta de búsqueda tendrá su salida en la vista de lista. He probado numerosas combinaciones para obtener una salida, pero fue en vano.

Aquí está mi código para que me ayudes.

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 

Respuesta

3

No está claro por qué su código no funciona bien. Trate de cambiar el código en su Catch cláusula

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

en

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

para que sepa lo que es el error exacto.

Puede concatenar el valor ColumnName ya que está establecido estáticamente en su código. Pero el valor en WHERE debe ser parametrizado ya que es el que ingresó el usuario.

probar este código modificado,

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

Voy a tratar de su código. :) –

+0

si se produjo algún error, amablemente publíquelo aquí gracias: D –

+1

¡Oye, funcionó! Muchas gracias señor. –

Cuestiones relacionadas