【问题标题】:textbox search like in google像谷歌一样的文本框搜索
【发布时间】:2014-01-08 19:19:01
【问题描述】:

我正在使用 C#.net Windows 窗体,我需要创建一个搜索文本框来显示组合框值(类似于 google 搜索);组合框中显示的值将是 SQL 2005 数据库中的值(例如,用户正在搜索 FirstName,组合框将显示所有名字,当用户键入更多字母时,这些名字会被过滤……如果用户正在搜索姓氏,组合框显示数据库中的所有姓氏值..等)

当我在做上述任务时

我已经写了这样的sql查询

SELECT  distinct(person_Firstname+''+person_Lastname) 
AS 
name FROM persondetails 
WHERE name Like '%'+@name+'%'

当我执行这个查询时,它会给出这样的错误 --- 必须声明一个标量变量

我的目标是当我在文本框中输入第一个字母时,它将显示以该字母开头的所有名称,就像在谷歌中一样...

谁能纠正这个....

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 '%'+@name+'%'";
    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;

【问题讨论】:

  • 编辑您的问题以显示将文本框的值插入 SQL 语句的整个代码片段。
  • 在 cmd.excutereader() 语句中出现类似“必须声明标量变量”的错误

标签: c# sql-server


【解决方案1】:

听起来您正在尝试在您的应用中构建自动完成功能。您只缺少 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

【讨论】:

  • 亲爱的坎贝尔,感谢您帮助它现在工作......但我有一点疑问......我正在做另一个应用程序,因为我们只是使用了一个不使用任何命令参数的查询,它是使用 php 连接到 mysql 数据库 ..so 是否可以仅使用人名和人姓来添加任何参数
  • @user:建议为您的 MySQL+PHP 问题创建另一个问题。我相信你会得到一个很好的答案!
  • 它给出了这样的错误 Invalid column name 'name'。在 persondetails 表中,我有三列 person_id 和 person_firstname 和 person_lastname 你能提供任何建议吗
  • 另一个疑问,我们可以在sql语句中直接包含这个("%" + txtName.Text + "%" )而不添加任何参数。
  • 请提出任何想法,我们可以直接在 sql 查询中包含 txtname.Text 而不是采用参数
【解决方案2】:

您正在寻找的功能称为自动完成。我不熟悉 Windows 窗体中的 AutoComplete 控件,但如果没有内置控件,那么肯定会有第三方控件来执行此操作。

AutoComplete 控件可能会提供一个事件回调,您可以在其中放置 SQL 查询以提供可能的完成。

至于您的 SQL 错误,看起来可能是列名的问题,但如果没有您的架构则很难判断。

编辑:

我看到您已经在使用自动完成控件了。您的 SQL 中的问题是您的 @name 参数在您的查询中,但您尚未将参数添加到 cmd 对象中,因此它不知道该放什么值。

【讨论】:

  • 我不知道,有没有可能用人名和人名替换@name。
猜你喜欢
  • 2018-12-05
  • 2011-06-28
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多