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