[英]VB.NET - Search function using Textbox and Combo Box
今天是個好日子! 我想在這里尋求有關我的代碼的幫助。 主要關注的是從MySQL數據庫中搜索文本框提供的關鍵字。 這是我的GUI供參考。
當我在文本框中鍵入我的搜索鍵和組合框中選定的列時,搜索查詢將在列表視圖上顯示其輸出。 我已嘗試過多種組合來獲得輸出,但無濟於事。
這是我的代碼,可以幫助我。
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
目前尚不清楚為什么你的代碼不能正常工作。 嘗試更改Catch
子句中的代碼
MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System")
成
Msgbox(ex.Message.ToString(), MsgBoxStyle.OkOnly, "Project Analysis System")
所以你會知道確切的錯誤是什么。
您可以連接ColumnName
的值,因為它是在代碼中靜態設置的。 但WHERE
上的值應該參數化,因為它是用戶輸入的值。
試試這個修改后的代碼
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.