首页 > 解决方案 > 无论如何在搜索栏中使用逗号在 SQL Query 中显示多行

问题描述

所以,我创建了一个搜索栏并连接到数据库。一切都很好,现在我想尝试创建一个可以在搜索栏中检测多个关键字的搜索栏。下面是我的数据库示例:

+------+--------------+
| Bil. | ID | Product |
+------+--------------+
| 1    | G1 | M1 Plus |
| 2    | G2 | M1 Plus |
| 3    | G3 | Omega 3 |
+------+--------------+

我想使用逗号作为分隔符来检测搜索栏中的关键字,例如当我搜索“G1,G2”时,它将显示这两个行。

我尝试使用此代码

SELECT ID FROM Egg WHERE (',' + ID + ',') OR (ID + ',') OR (',' + ID) OR (ID) LIKE '" & @ID_search & "';"

有什么我需要改进的吗?

标签: sqlvb.net

解决方案


您可以在逗号上拆分输入,然后根据这些部分构造您的 SQL,例如

Dim keywords = TextBox1.Text.Split(","c)
Dim criteria As New List(Of String)
Dim command As New SqlCommand

For i = 0 To keywords.GetUpperBound(0)
    Dim keyword = keywords(i)
    Dim parameterName = $"@SomeColumn{i}"

    criteria.Add($"SomeColumn LIKE {parameterName}")
    command.Parameters.Add(parameterName, SqlDbType.VarChar, 50).Value = $"%{keyword}%"
Next

Dim sql = $"SELECT * FROM SomeTable WHERE {String.Join(" OR ", criteria)}"

command.CommandText = sql

如果您输入G1,则将产生:

SELECT * FROM SomeTable WHERE SomeColumn LIKE @SomeColumn0

如果您输入G1,G2,G3那么将产生:

SELECT * FROM SomeTable WHERE SomeColumn LIKE @SomeColumn0 OR SomeColumn LIKE @SomeColumn1 OR SomeColumn LIKE @SomeColumn2

推荐阅读