2012-11-20 42 views
2

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

所以从一开始...利用寄存器和包括技能组是一个单一的文本框,他们在的“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) 

创建PARAMATERS细节

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)` 

回答

0

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

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) 
0

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

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 & "%") 

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

1

,而不像你想使用

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不够好建议将用户输入的格式设置为所需的字符串。

+0

这确实会带来设计问题 - 您是否有每个用户的技能集关系表?然后按照你的建议做一个连接和'IN'?还有什么期望 - 像%c%'会返回C++和C#,而'IN'只会返回完全匹配 – RemarkLima

+1

非常好的一点,人们是否只有一个技能或一个技能列表表示为字符串。在第一个我的解决方案可以工作,但它不会是一个好的数据库设计(取决于具体情况)。在后面的RemarkLima的解决方案中,虽然你需要考虑他对于局部匹配的观点,而不是最好的设计。即使是这种情况,如果有人说“C#,PHP”,但搜索是为“PHP,C#”完成的。 –

+0

绝对!要么答案是解决问题的方法,但正如你所说,这个设计听起来像是可以改进的。可能会设置一个技能表,技能名称为PersonID,然后获取匹配的技能列表以及RIGHT加入个人详细信息 - 例如。 – RemarkLima

相关问题