我正在实现一个系统,在该系统中,我想在datagridview的文本框中更改文本时搜索产品。我已经完成了那部分。
但是我发现搜索命令仅帮助我找到单元格的乘积第一个单词。但是我想用任何选定的单元格对其进行过滤。
示例:在我的datagridview中,有一列Product Name
。在该列中,数据为Galaxy A20s。当前,我必须在搜索文本框中键入以[[Galaxy ....开始,然后仅显示搜索结果。我想像我输入A20s一样修改输出,然后结果也应该在datagridview中过滤。
这是我当前正在使用的代码。
Try
con = New OleDbConnection(cs)
con.Open()
cmd = New OleDbCommand("SELECT (ProductID) as [Product ID],(ProductName) as [Product Name],(Brand) as [Brand],(UnitPrice) as [Unit Price] from ProductDB where ProductName like '" & txtSearch.Text & "%' order by ProductName", con)
Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
Dim myDataSet As DataSet = New DataSet()
myDA.Fill(myDataSet, "ProductDB")
dgFillProduct_Stock.DataSource = myDataSet.Tables("ProductDB").DefaultView
con.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
谢谢
WHERE
子句仅在值的末尾具有%
通配符:ProductName like '" & txtSearch.Text & "%'
因此ProductName
的开头需要匹配,但结尾可以是任意值。如果您希望在字符串值的两端都具有该功能,则只需将通配符放在两端:
ProductName like '%" & txtSearch.Text & "%'
重要提示:您的代码当前可以进行SQL注入,这不仅是一个明显的安全漏洞,还是一个非常常见的错误源。您应该使用查询参数,而不是直接在查询中放置用户输入,因为恶意用户可能在查询中输入code。
This question及其接受的答案是如何执行此操作的一个很好的例子。