【问题标题】:Implement Search from database as alphabets are entered在输入字母时从数据库执行搜索
【发布时间】:2010-11-07 19:28:13
【问题描述】:

我已经编写了一个从数据库表中搜索特定字符串的代码。我想要实现的是搜索,就像我们在 facebook 上搜索朋友一样意味着它返回与给定输入匹配的结果,即使它是部分的 例如,如果我想在输入单个字符后立即搜索 ANDREW,如果我输入“an”之类的结果应该开始出现 安迪 安德鲁 还有....

这是我的文本框文本更改方法的代码

    table = new DataTable();
    table.Columns.Add("Name");
    table.Columns.Add("Type");
    table.Columns.Add("Status");
    table.Columns.Add("Date Created");
    table.Columns.Add("Action");

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = textBoxSearch.Text;
    cmd.CommandText = "SELECT id,uName,uType,uStatus,uDate from users WHERE uName=@username ";

    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows == true)
    {
        while (dr.Read())
        {
            MessageBox.Show(dr["uName"].ToString() + dr["uType"].ToString() + dr["uStatus"].ToString());
            row = table.NewRow();
            row["Name"] = dr["uName"].ToString();
            row["Type"] = dr["uType"].ToString();
            row["Status"] = dr["uStatus"].ToString();
            row["Date Created"] = dr["uDate"].ToString();
            // row["Action"] = new Button();
            table.Rows.Add(row);
            UsersView.DataSource = table;
        }//End While for entering peresent amount of data                   
    }//End If to check wether or not users exist
    dr.Close();//Close Datareader
}

【问题讨论】:

    标签: c# sql desktop-application


    【解决方案1】:

    当您使用 C# 时,为什么不使用更多 LINQ-y 的东西?

    设置您的 LINQ 数据库上下文文件并使用以下代码来实现您想要的(快速输入,如果有任何错误,请见谅):

    table = new DataTable();
    table.Columns.Add("Name");
    table.Columns.Add("Type");
    table.Columns.Add("Status");
    table.Columns.Add("Date Created");
    table.Columns.Add("Action");
    
    var db = new DbDataContext();
    var users = (from u in db.users
                 where u.Contains(textBoxSearch.Text)
                 select u).ToList();
    foreach(var user in users)
    {
         MessageBox.Show(user.uName + user.uType + user.uStatus);
                row = table.NewRow();
                row["Name"] = user.uName;
                row["Type"] = duser.uType;
                row["Status"] = user.uStatus;
                row["Date Created"] = user.uDate.ToShortDateString();
                table.Rows.Add(row);
    }
    
    UsersView.DataSource = table;
    

    【讨论】:

    • 有一个错误 DbDataContext 不在上下文中。我不知道如何使用 linq
    • 你设置好 dbml 文件了吗? DbDataContext 将引用该 dbml 文件的名称。如果您需要了解绝对基础知识,请使用此视频:asp.net/linq/videos/how-do-i-linq-to-sql-overview,或者如果您想深入了解它,我建议您在此处阅读有关 LINQ 的一本书或整个系列:asp.net/linq/videos
    【解决方案2】:

    要回调数据库,CommandText变成

    ... WHERE uName LIKE @username + '%'
    

    但是,我不会每次都回调数据库:我会使用自动完成控件。有几个autocomplete controls 用于 Winforms。 And this SO answer too.

    【讨论】:

    • 根据您的示例给出“an%”
    • 我已经实现了自动完成文本框,但是在数据网格视图的情况下我该怎么做呢?因为创建了 3 个值名称类型日期等??
    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多