首页 > 解决方案 > 如何在 vb.net 中搜索多个字段名称以过滤搜索 datagridview

问题描述

这是我的代码

da = New OleDbDataAdapter("select * from additem where productname like '%" & TextBox1.Text & "%'", con)

我想添加字段名“价格”、“状态”、“类别”和“状态”

如何将这些添加到我的代码中?

标签: sqlvb.netms-accesssearchdatagridview

解决方案


WHERE子句是一个布尔表达式。您通常如何创建复合布尔表达式?就像你在学校的数学课上学到的一样:使用 AND 和 OR 运算符。它与 VB 代码中的布尔表达式没有什么不同,例如

WHERE productname LIKE '%' + @SearchText + '%' OR category LIKE '%' + @SearchText + '%'

请注意,我已经写了使用参数,你也应该这样做。但是,根据您的提供者,您可能无法在多个地方使用一个参数,因此您必须创建具有相同值的多个参数,例如

Dim sql = "SELECT *
           FROM additem
           WHERE productname LIKE '%' + @productname + '%'
           OR category LIKE '%' + @category + '%'"

Dim command As New OleDbCommand(sql, connection)

With command.Parameters
    .Add("@productname", OleDbType.VarChar, 50).Value = TextBox1.Text
    .Add("@category", OleDbType.VarChar, 50).Value = TextBox1.Text
End With

另请注意,该运算符仅适用于文本值,因此搜索以相同方式LIKE命名的列可能没有意义。price您可以在 SQL 代码中将价格转换为文本,但对货币值进行部分搜索真的有意义吗?我倾向于检查搜索文本是否实际上是一个数字,如果是,则专门搜索该值,例如

Dim sql = "SELECT *
           FROM additem
           WHERE productname LIKE '%' + @productname + '%'
           OR category LIKE '%' + @category + '%'
           OR (@price1 IS NOT NULL AND price = @price2)"

Dim command As New OleDbCommand(sql, connection)

With command.Parameters
    .Add("@productname", OleDbType.VarChar, 50).Value = TextBox1.Text
    .Add("@category", OleDbType.VarChar, 50).Value = TextBox1.Text

    Dim price1Parameter = .Add("@price1", OleDbType.Currency)
    Dim price21Parameter = .Add("@price2", OleDbType.Currency)

    Dim price As Decimal

    If Decimal.TryParse(TextBox1.Text, price) Then
        price1Parameter.Value = price
        price2Parameter.Value = price
    Else
        price1Parameter.Value = DBNull.Value
        price2Parameter.Value = DBNull.Value
    End If
End With

如果您不能在多个地方使用相同的参数,那么您需要两个参数 for price,因为您需要进行两次检查。要么两个参数都是,要么NULL都包含相同的数字。如果它们都是,NULL那么最后一个复合条件不匹配任何记录,否则它将只匹配包含该数字的记录。


推荐阅读