【问题标题】:Search database for substring based on user input using SQL使用 SQL 根据用户输入在数据库中搜索子字符串
【发布时间】:2012-11-20 16:03:19
【问题描述】:

我正在做一个 uni 项目,我需要使用 vb.net 中的 SQL 命令根据他们的 FirstName、SurName、EmailAddress 或 SkillSet 从 Visual Studio 2010 的数据库中搜索用户。

所以从一开始...用户注册并包含一个技能集,该技能集是他们在“Java”、“C#”等中键入的单个文本框。

如果用户拥有不止一项技能,我可以搜索除 SkillSet 之外的所有内容。

我想在 SQL 命令中使用“LIKE”搜索任何内容。

这是我目前用于搜索用户的内容:

SQL命令选择我想要的细节

Dim command As New SqlCommand("SELECT [FirstName], [SurName], [EmailAddress], [SkillSet], [UserID] FROM [Users] WHERE ([FirstName] = @FirstName OR [SurName] = @SurName OR [EmailAddress] = @EmailAddress OR [SkillSet] LIKE '%' @SkillSet '%')", connection)

创建参数

    Dim firstnameParam As New SqlParameter("@FirstName", Me.UserSearchTextBox.Text)
    Dim surnameParam As New SqlParameter("@SurName", Me.UserSearchTextBox.Text)
    Dim emailParam As New SqlParameter("@EmailAddress", Me.UserSearchTextBox.Text)
    Dim skillSetParam As New SqlParameter("@SkillSet", Me.UserSearchTextBox.Text)

    command.Parameters.Add(firstnameParam)
    command.Parameters.Add(surnameParam)
    command.Parameters.Add(emailParam)
    command.Parameters.Add(skillSetParam)`

【问题讨论】:

    标签: sql vb.net visual-studio-2010 string-matching sql-like


    【解决方案1】:

    你想使用 IN 而不是 LIKE

    Dim command As New SqlCommand("SELECT [FirstName], [SurName], [EmailAddress], [SkillSet], [UserID] FROM [Users] WHERE ([FirstName] = @FirstName OR [SurName] = @SurName OR [EmailAddress] = @EmailAddress OR [SkillSet] IN (@SkillSet)", connection)
    

    SkillSet 需要以

    之类的格式传递
    'SQL','PHP','JAVA'
    

    我不太了解 Vb.net,无法建议将用户输入格式化为所需的字符串。

    【讨论】:

    • 这确实提出了设计问题 - 您是否有每个用户技能集的关系表?然后按照您的建议加入和IN?还有会发生什么 - like %c% 将返回 C++ 和 C#,而 IN 只会返回完全匹配
    • 非常好,人们是否只有一个技能或以字符串表示的技能列表。首先,我的解决方案可以工作,但它不是一个好的数据库设计(取决于具体情况)。在后来的 RemarkLima 的解决方案中,虽然你需要考虑他关于部分匹配的观点,但又不是最佳设计,但它会起作用。即使是这种情况,如果有人说“C#,PHP”但搜索是为“PHP,C#”完成的。
    • 绝对!任何一个答案都可以解决问题,但正如你所说,设计听起来可以改进。可能会设置一个技能表,技能名称为 PersonID,然后获取匹配的技能列表并 RIGHT JOIN 到人员详细信息 - 例如。
    【解决方案2】:

    一个非常快速的谷歌在这个网站上揭示了以下答案:

    Use of SqlParameter in SQL LIKE clause not working

    Howto? Parameters and LIKE statement SQL

    所以很简单,您需要使用 &(就像您在 VB.NET 中一样 - 在 C#.NET 中这将是 +)将字符串 '%' 与参数连接起来,如下所示:

    Dim command As New SqlCommand("SELECT [FirstName], [SurName], [EmailAddress], [SkillSet], [UserID] FROM [Users] WHERE ([FirstName] = @FirstName OR [SurName] = @SurName OR [EmailAddress] = @EmailAddress OR [SkillSet] LIKE '%' & @SkillSet & '%')", connection)
    

    Dim skillSetParam As New SqlParameter("@SkillSet", "%" & Me.UserSearchTextBox.Text & "%")
    

    从查询中删除'%' 会产生相同的结果。

    【讨论】:

      【解决方案3】:

      现在可以使用了。我错过了另一组括号。现在,如果用户只插入几个字符,我就可以检索结果。谢谢你们的帮助!!

      Dim command As New SqlCommand("SELECT [FirstName], [SurName], [EmailAddress], [UserID], [SkillSet] FROM [Users] WHERE ([FirstName] = @FirstName OR [SurName] = @SurName OR [EmailAddress] = @EmailAddress OR [SkillSet] LIKE '%@SkillSet%' )", connection)
      

      【讨论】:

        猜你喜欢
        • 2013-07-13
        • 2017-02-05
        • 2017-04-02
        • 2019-04-09
        • 2013-07-03
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多