Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL根据用户输入搜索数据库中的子字符串_Sql_Vb.net_Visual Studio 2010_String Matching_Sql Like - Fatal编程技术网

使用SQL根据用户输入搜索数据库中的子字符串

使用SQL根据用户输入搜索数据库中的子字符串,sql,vb.net,visual-studio-2010,string-matching,sql-like,Sql,Vb.net,Visual Studio 2010,String Matching,Sql Like,我正在做一个uni项目,其中我需要使用vb.net中的SQL命令,根据用户的名字、姓氏、电子邮件地址或技能集,从Visual Studio 2010中的数据库中搜索用户 所以从一开始。。。使用注册并包括一个技能集,该技能集是他们在Java、C等中键入的单个文本框 如果用户有多种技能,我可以搜索除技能集之外的所有技能 我想在SQL命令中使用LIKE搜索任何内容 以下是我目前用于搜索用户的信息: SQL命令选择所需的详细信息 创建参数 一个非常快速的谷歌在这个网站上展示了以下答案: 因此,非常简单地

我正在做一个uni项目,其中我需要使用vb.net中的SQL命令,根据用户的名字、姓氏、电子邮件地址或技能集,从Visual Studio 2010中的数据库中搜索用户

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

如果用户有多种技能,我可以搜索除技能集之外的所有技能

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

以下是我目前用于搜索用户的信息:

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 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)
技能集需要以如下格式传递

'SQL','PHP','JAVA'

我对Vb.net不太了解,无法就如何将用户输入格式化为所需字符串提供建议

现在开始工作了。我又少了一组括号。现在,如果用户只插入几个字符,我就可以检索结果。谢谢你们的帮助,伙计们

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)

这确实提出了设计的问题——您是否有每个用户技能集的关系表?然后按照你的建议加入?还有,如%C%将返回C++和C,而只返回精确匹配的好点,人们只会有一个技能或一个字符串表示的技能列表。首先,我的解决方案是可行的,但是根据具体情况,它不是一个好的数据库设计。在后面的评论中,利马的解决方案会起作用,尽管你需要考虑到他关于部分匹配的观点,而不是最佳设计。即使是这样,如果有人说C,PHP,但搜索是为PHP,C完成的,那该怎么办呢!无论哪种答案都是问题的解决方案,但正如您所说,设计听起来似乎可以改进。可能会设置一个技能表,将技能名称设置为PersonID,然后获得一个匹配的技能列表,并将其右键连接到人员详细信息上——例如。
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)
'SQL','PHP','JAVA'
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)