2

我正在做一个 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)`
4

3 回答 3

1

而不是 LIKE 你想使用 IN

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,无法建议将用户输入格式化为所需的字符串。

于 2012-11-20T16:15:52.683 回答
0

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

在 SQL LIKE 子句中使用 SqlParameter 不起作用

如何?参数和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 skillSetParam As New SqlParameter("@SkillSet", "%" & Me.UserSearchTextBox.Text & "%")

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

于 2012-11-20T16:12:37.887 回答
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)
于 2012-11-21T11:50:55.733 回答