从winforms文本框中立即从sql数据库中获取数据

时间:2011-03-17 04:56:38

标签: 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_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;

    }
}

但是,因为每次从数据库中获取数据,所以需要更多时间,但我想要更快的方式。因此,我将使用DATASETS用于此目的,因为数据集用于断开连接的环境。

OR

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

现在,当在文本框中输入文本时,它不会从sql数据库中获取数据,而是会在GridView中搜索,那么这会更快吗?

哪种方式有效?

项目表有340万条记录。

3 个答案:

答案 0 :(得分:1)

你的物品表有多大?

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

如果它很大,我会建议使用计时器。在每个文本更改上,重新启动可能0.5秒的计时器。当计时器过去后,只查询数据库。这可以防止在用户输入时进行多次查询。

或者,如果您可以阅读整个表格并将其分配给AutoCompleteCustomSource

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

答案 1 :(得分:1)

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

此外,您可能不应该搜索每个文本更改,但等待少量时间说2秒,在此期间文本框没有更改然后获取。否则你将获取在文本框中输入的任何新字符(我认为)。

答案 2 :(得分:1)

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