我有用户的SQL Server数据库,现在我想为这个表做简单的搜索算法。我的目标是制作可以组合多个单词搜索的算法,所以我尝试了这个策略:当按下搜索按钮时,方法首先从搜索字符串中提取单个单词,然后将它们作为参数插入SqlCommand
{{ 1}}。
它适用于一个单词,但当我输入多个单词时它会卡住。这是代码示例:
CommandText
当我进入调试模式并键入两个单词时,command.Parameters显示它有2个参数,但它仍然会破裂。任何见解有什么不对?
谢谢!
==编辑==
我得到了这种类型的
SqlException:'userUsername'
附近的语法不正确
答案 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;