如何在vb.net中搜索许多字段名称以过滤搜索datagridview

时间:2018-10-25 11:43:41

标签: sql vb.net ms-access search datagridview

这是我的代码

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

我要添加字段名称“价格”,“状态”,“类别”和“状态”

如何将它们添加到我的代码中?

1 个答案:

答案 0 :(得分:0)

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

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