2011-06-11 78 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