我在做一个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)`
这确实会带来设计问题 - 您是否有每个用户的技能集关系表?然后按照你的建议做一个连接和'IN'?还有什么期望 - 像%c%'会返回C++和C#,而'IN'只会返回完全匹配 – RemarkLima
非常好的一点,人们是否只有一个技能或一个技能列表表示为字符串。在第一个我的解决方案可以工作,但它不会是一个好的数据库设计(取决于具体情况)。在后面的RemarkLima的解决方案中,虽然你需要考虑他对于局部匹配的观点,而不是最好的设计。即使是这种情况,如果有人说“C#,PHP”,但搜索是为“PHP,C#”完成的。 –
绝对!要么答案是解决问题的方法,但正如你所说,这个设计听起来像是可以改进的。可能会设置一个技能表,技能名称为PersonID,然后获取匹配的技能列表以及RIGHT加入个人详细信息 - 例如。 – RemarkLima