使用在文本框中输入的多个关键字搜索 SQL 数据库

迈克

我有一个表单,其中TextBox包含用户要输入的搜索词,并将结果显示在ListBox.

我知道SQL无论输入的顺序如何,都可以使用所有搜索词并使用这些词进行搜索。

我只是不确定拆分单词并将它们作为单独的搜索词传递给 SELECT 命令的正确语法。

我目前拥有的是以下内容:

If txtDescription.Text <> "" Then
     SQL.AddParam("@Description", "%" & txtDescription.Text & "%")
     SQL.ExecQuery("SELECT Description FROM PartsList WHERE Description LIKE @Description ORDER BY ID ASC;")

     For Each x As DataRow In SQL.DBDT.Rows
         lbPartsList.Items.Add(x("Description"))
     Next
End If

FOR 语句处理每一行并将它们添加到ListBox用于显示给用户。

我将不胜感激。

我已经搜索了解决方案,其中大部分与其他语言有关,我对此知之甚少。

温姆贝莱特

我首先在 SQL 服务器上创建一个函数来将字符分隔的字符串列表拆分成一个表:

CREATE Function [dbo].[StringListToNVarcharTable]
 (@List nvarchar(MAX), @Splitter char(1))
   RETURNS @tbl TABLE ([value] nvarchar(MAX) NOT NULL) AS
BEGIN

    IF @Splitter IS NULL
        SET @Splitter = ','

    DECLARE @pos        int,
            @nextpos    int,
            @valuelen   int

    SELECT @pos = 0, @nextpos = 1

    WHILE @nextpos > 0
       BEGIN
          SELECT @nextpos = charindex(@Splitter, @list, @pos + 1)
          SELECT @valuelen = CASE WHEN @nextpos > 0
                                  THEN @nextpos
                                  ELSE len(@list) + 1
                             END - @pos - 1
          INSERT @tbl ([value])
             VALUES (convert(nvarchar(MAX), substring(@list, @pos + 1, @valuelen)))
          SELECT @pos = @nextpos
       END
    RETURN
END
GO

进一步说,一旦你有了这个函数,使用这个函数创建一个可以为你执行搜索的存储过程就变得轻而易举了——我个人更喜欢用管道分隔的字符串,但你可以选择你喜欢的。

CREATE PROCEDURE GetPartDescription
@PipeDelimitedSearchString VARCHAR(MAX)
AS
BEGIN
    DECLARE @TblSearchStrings TABLE ([value] NVARCHAR(MAX) NOT NULL)

    IF (@PipeDelimitedSearchString IS NOT NULL AND LEN(@PipeDelimitedSearchString) > 0)
    BEGIN
        INSERT INTO @TblSearchStrings ([value])
        SELECT [value]
        FROM StringListToNVarcharTable(@PipeDelimitedSearchString, '|')
    END

    SELECT 
        pl.PartId, 
        pl.PartName, 
        pl.PartDescription
    FROM PartsList pl
    INNER JOIN @TblSearchStrings ts ON pl.[Description] LIKE ('%' + ts.[value] + '%')
    GROUP BY
        pl.PartId, 
        pl.PartName, 
        pl.PartDescription
    ORDER BY
        pl.PartId, 
        pl.PartName, 
        pl.PartDescription
END

现在剩下的是从代码中调用存储过程。请注意,我没有测试此代码,但您已了解其要点。您有一个可重用的函数和一个可重用的 sp,并且您已经摆脱了代码中的硬编码 SQL 查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

搜索多个关键字-SQL语句-Access数据库

来自分类Dev

如何从文本框中搜索数据并从 SQL 数据库填充 datagridview 的特定列?

来自分类Dev

尝试从SQL数据库获取数据:在文本框中输入什么

来自分类Dev

使用SQL Server数据库中的数据在文本框中自动完成

来自分类Dev

更新SQL数据库中的数据

来自分类Dev

Python:使用SQL搜索数据库

来自分类Dev

C#文本框更新sql数据库

来自分类Dev

使用vb.net中的文本框更新sql 2005数据库

来自分类Dev

SQL 数据库和组合框

来自分类Dev

多个SQL Server数据库访问

来自分类Dev

SQL选择多个数据库

来自分类Dev

从 SQL 数据库填充多个列表

来自分类Dev

Robot Framework-使用PostgreSQL从数据库执行Sql脚本关键字

来自分类Dev

GitHub中的SQL数据库

来自分类Dev

SQL数据库中的持久变量?

来自分类Dev

SQL数据库中的图像

来自分类Dev

SQL数据库中的表设计

来自分类Dev

数据库中的SQL Server对象

来自分类Dev

在数据库中的SQL查询

来自分类Dev

连接SQL数据库中的表

来自分类Dev

SQL数据库中的表设计

来自分类Dev

在SQL Server中复制数据库

来自分类Dev

SQL从数据库中删除值

来自分类Dev

在SQL Server中收缩数据库

来自分类Dev

SQL中的表单数据库

来自分类Dev

GitHub中的SQL数据库

来自分类Dev

ef中的sql数据库

来自分类Dev

Android中的SQL数据库

来自分类Dev

更新 SQL 数据库中的表