这是我的代码
da = New OleDbDataAdapter("select * from additem where productname like '%" & TextBox1.Text & "%'", con)
我要添加字段名称“价格”,“状态”,“类别”和“状态”
如何将它们添加到我的代码中?
答案 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
,则最后一个复合条件与任何记录都不匹配,否则将仅与包含该数字的记录匹配。