Как я могу искать много названий полей для фильтрации поиска datagridview в vb.net - PullRequest
0 голосов
/ 25 октября 2018

Вот мой код

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

Я хочу добавить имена полей 'цена', 'статус', 'категория' и 'статус'

Как я могу добавить их в свой код?

1 Ответ

0 голосов
/ 25 октября 2018

Предложение 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, то это последнее составное условие не соответствует ни одной записи, в противном случае оно будет соответствовать только записям, содержащим это число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...