C# 从winforms textbox立即从sql数据库中获取数据

C# 从winforms textbox立即从sql数据库中获取数据,c#,.net,sql,sql-server-2005,dataset,C#,.net,Sql,Sql Server 2005,Dataset,我将Winforms用于我的应用程序&SQL Server作为数据库 我希望在文本框中键入任何文本后,立即从SQL SERVER数据库表中获取/搜索所提供文本的结果 为此,我提出了以下问题: public partial class Form1 : Form { SqlConnection conn = new SqlConnection(); public Form1() { conn.ConnectionString = "Trusted_Co

我将Winforms用于我的应用程序&SQL Server作为数据库

我希望在文本框中键入任何文本后,立即从SQL SERVER数据库表中获取/搜索所提供文本的结果

为此,我提出了以下问题:

    public partial class Form1 : Form
{
    SqlConnection conn = new SqlConnection();
    public Form1()
    {
        conn.ConnectionString = "Trusted_Connection=true";
        conn.Open();
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

        DataTable dt = null;

        SqlCommand cmd = new SqlCommand ("SELECT * FROM items WHERE item_name LIKE'" +    textBox1.Text + "%'", conn);
        SqlDataReader reader = cmd.ExecuteReader();

        dt = new DataTable();

        dt.Load(reader);

        dataGridView1.DataSource = dt;

    }
}
但是,由于每次都从数据库中获取数据,因此需要更多的时间,但我希望有一种更快的方法。因此,我应该为此使用数据集,因为数据集用于断开连接的环境

首先,我将从数据库中获取整个ITEM表到GridView中,并在表单打开时显示它

现在,当文本输入到文本框中时,它将不会从sql数据库中获取数据,而是在GridView中进行搜索,这样会更快吗

哪种方式更有效


项目表有340万条记录。

您的项目表有多大

如果它不大,只需将其存储在数据集中即可。使用相同的文本框,但在数据集中搜索

如果它很大,我建议使用定时器。在每次文本更改时,重新启动计时器大约0.5秒。计时器运行后,只查询数据库。这可以防止用户键入时出现多个查询

或者,如果您可以读取整个表并将其分配给
自动完成CustomSource

textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
    textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);

你的物品表有多大

如果它不大,只需将其存储在数据集中即可。使用相同的文本框,但在数据集中搜索

如果它很大,我建议使用定时器。在每次文本更改时,重新启动计时器大约0.5秒。计时器运行后,只查询数据库。这可以防止用户键入时出现多个查询

或者,如果您可以读取整个表并将其分配给
自动完成CustomSource

textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
    textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);

对。使用数据集并在其上搜索会快得多。由于您使用的是WinForms,内存占用可能也不是问题,除非您从数据库中获取大量行


另外,您可能不应该搜索每一个文本更改,而是等待一小段时间,比如说2秒钟,在此期间文本框没有更改,然后获取。否则,您将获取在文本框中输入的任何新字符(我认为)。

是。使用数据集并在其上搜索会快得多。由于您使用的是WinForms,内存占用可能也不是问题,除非您从数据库中获取大量行


另外,您可能不应该搜索每一个文本更改,而是等待一小段时间,比如说2秒钟,在此期间文本框没有更改,然后获取。否则,您将获取在文本框中输入的任何新字符(我认为)。

更好的方法是使用DataSet/DataTable。从表单加载上的表中读取所有数据并将其存储在表单中。

更好的方法是使用DataSet/DataTable。读取表单加载表中的所有数据并将其存储在表单中。

@Remus Rusanu:在文本框更改事件中,我应该写入它?@Remus Rusanu:什么是快速?请提及正确的完整代码不要照Remus的建议做,它会抹掉你的整个桌子。@Remus Rusanu:在文本框更改事件中,我应该写下它?@Remus Rusanu:什么很快?请说明正确的完整代码不要按照Remus的建议做,它会抹掉您的整个表。先生,我在items表中有340万条记录IR,我在items表中有340万条记录