2012-08-24 65 views
0

我有用戶的SQL Server數據庫,現在我想爲這個表做簡單的搜索算法。我的目標是使算法可以結合搜索多個單詞,所以我嘗試了這種策略:當搜索按鈕被按下時,方法首先從搜索字符串中提取單個單詞,然後將它們作爲參數插入到SqlCommandCommandText中。如何通過多字搜索sql數據庫

它適用於一個單詞,但當我鍵入多個單詞時它會卡住。下面是代碼示例:

​​3210

當我去調試模式和類型在兩個單詞,command.Parameters顯示它有2個參數,但它仍然裂紋。任何見解有什麼不對?

謝謝!

== ==編輯

我得到這個類型

SQLEXCEPTION的:附近有語法錯誤userUsername「

回答

1

我還沒有完全理解你的代碼,但乍一看我說:
你需要圍繞你的命令文本括號,你需要添加OR邏輯運算符

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

從循環中退出,你需要刪除的最終或

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; 
+0

是的,這非常有幫助!非常感謝! – miller

2

打印命令剛執行之前重寫代碼它然後嘗試手動執行它。這通常會突出顯示SQL命令的語法問題。