如何用多个单词搜索sql数据库

时间:2012-08-24 09:27:13

标签: c# sql-server ado.net search-engine

我有用户的SQL Server数据库,现在我想为这个表做简单的搜索算法。我的目标是制作可以组合多个单词搜索的算法,所以我尝试了这个策略:当按下搜索按钮时,方法首先从搜索字符串中提取单个单词,然后将它们作为参数插入SqlCommand {{ 1}}。

它适用于一个单词,但当我输入多个单词时它会卡住。这是代码示例:

CommandText

当我进入调试模式并键入两个单词时,command.Parameters显示它有2个参数,但它仍然会破裂。任何见解有什么不对?

谢谢!

==编辑==

我得到了这种类型的

  

SqlException:'userUsername'

附近的语法不正确

2 个答案:

答案 0 :(得分:2)

在执行命令之前打印命令,然后尝试手动执行。这通常会突出显示SQL命令的语法问题。

答案 1 :(得分:1)

我还没有完全理解你的代码,但乍一看我说:
您需要在命令文本周围添加括号,并且需要添加OR逻辑运算符

command.CommandText += String.Format(" (userUsername LIKE @{0} OR userName LIKE @{0} OR userSurname LIKE @{0}) OR ", id); 

当然退出循环你需要删除最终的OR

command.CommandText = command.CommandText.Substring(0, command.CommandText.Length - 4);

我将尝试使用简单的字符串

重写您的代码
string sqlText = "SELECT * FROM tbl_Users WHERE userActive = 1"; 
if (!String.Empty.Equals(tboxInputUsers.Text)) 
{ 
    // It's important to add an open parenthesis here to get a correct logic
    // All activeusers with names like words
    sqlText += " AND ("; 
    string[] words = tboxInputUsers.Text.Split(' '); 
    string id = "id"; 

    foreach (string word in words) 
    { 
        id += "a"; 
        sqlText += String.Format(" (userUsername LIKE @{0} OR " + 
                                   "userName LIKE @{0} OR " + 
                                   "userSurname LIKE @{0}) OR ", id); 
        command.Parameters.AddWithValue(String.Format("@{0}", id), word); 
    } 
    // We are sure that there is at least one word, so we can  remove the excess OR and close
    // the opening parenthesis following the AND
    sqlText = sqlText(0, sqlText.Length - 4);
    sqlText += ")";
}
command.CommandText = sqlText;