2011-06-11 75 views
0

我使用C#.net Windows窗體,我需要創建一個搜索文本框,它將顯示組合框值(類似於谷歌搜索);顯示在組合框中的值將是來自SQL 2005數據庫的值(例如用戶在FirstName上搜索,組合框將顯示所有名字,當用戶輸入更多字母時,會顯示所有名字,如果用戶搜索姓氏,組合框顯示數據庫中的所有姓氏值..等)文本框搜索像谷歌

當我做上述任務

當我執行我寫SQL查詢這樣

SELECT distinct(person_Firstname+''+person_Lastname) 
AS 
name FROM persondetails 
WHERE name Like '%'[email protected]+'%' 

這個查詢給出了這樣的錯誤---必須聲明一個標量變量

我的目標是當我在搜索框中輸入第一個字母,將顯示所有名稱以像谷歌的信...

任何一個可以解決這個....

private void tbautocomplete_TextChanged(object sender, EventArgs e) 
{ 
    AutoCompleteStringCollection namecollection = new AutoCompleteStringCollection(); 
    SqlConnection con = new SqlConnection(@"Data Source=88888;Initial Catalog=contrynames;Integrated Security=True"); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT distinct(person_Firstname+''+person_Lastname) AS name FROM persondetails WHERE name Like '%'[email protected]+'%'"; 
    con.Open(); 
    SqlDataReader rea = cmd.ExecuteReader(); 
    if (rea.HasRows == true) 
    { 
     while (rea.Read()) 
     namecollection.Add(rea["name"].ToString());    
    } 
    rea.Close(); 

    tbautocomplete.AutoCompleteMode = AutoCompleteMode.Suggest; 
    tbautocomplete.AutoCompleteSource = AutoCompleteSource.CustomSource; 
    tbautocomplete.AutoCompleteCustomSource = namecollection; 
+1

編輯您的問題以顯示將文本框的值插入到SQL語句中的代碼的完整剪切。 – 2011-06-11 15:07:59

+0

它給錯誤,如「必須聲明一個標量變量」在cmd.excutereader()語句 – user682417 2011-06-11 15:12:03

回答

3

這聽起來像你正試圖在你的應用程序中建立一個自動完成功能。你只是在你的SqlCommand中缺少參數。試試這個:

string searchFor = "%" + txtName.Text + "%"; //the string the user entered. 

cmd.CommandText = @"SELECT distinct(person_Firstname+''+person_Lastname) AS name 
        FROM persondetails 
        WHERE person_Lastname Like @name 
        OR person_Firstname LIKE @name"; 

cmd.Parameters.AddWithValue("@name", searchFor); 

你的WHERE子句必須在你的表中使用列名。這聽起來好像您想要將第一個或最後一個名稱列與您的搜索標記進行匹配。

WHERE person_Lastname LIKE @name 
    OR person_Firstname LIKE @name 
+0

尊敬的坎貝爾,感謝您的幫助現在工作......但我有一個小小的懷疑..我正在做另一個應用程序,因爲我們只是使用了一個查詢不使用任何命令參數,它連接到MySQL數據庫與PHP。 .so是否可以不添加任何參數只能使用人名和人姓 – user682417 2011-06-11 15:25:13

+0

@user:建議爲你的MySQL + PHP問題創建另一個問題。我相信你會得到一個很好的答案! – 2011-06-11 15:29:13

+0

它給這樣的錯誤無效的列名稱'名稱'。在persondetails表我有三列person_id和person_firstname和person_lastname你會請給任何建議 – user682417 2011-06-11 15:37:55

0

的您正在查找的功能稱爲自動完成功能。我不熟悉Windows窗體中的AutoComplete控件,但如果沒有內置控件,肯定會有第三方控件執行此操作。

AutoComplete控件可能會提供事件回調,您可以在其中放置SQL查詢以提供可能的完成。

至於你的SQL錯誤,看起來它可能是列名的問題,但是如果沒有你的模式很難說。

編輯:

我看你使用的是自動完成控逆變了。你的SQL中的問題是你的查詢中有@name參數,但是你還沒有將該參數添加到cmd對象中,所以它不知道要在那裏放置什麼值。

+0

我不知道,有沒有任何可能取代@名與人名和人名。 – user682417 2011-06-11 15:17:30