I am using Winforms for my application & SQL Server as database. 

I want that as soon as any text is typed in a textbox , immediate results are fetched/searched from the SQL SERVER database tables for that supplied text.

For this , i have given the following query:

```
    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;

    }
}

```

But , as this fetches data every time from the database, so it takes more time, but i want a faster way. so shall i use DATASETS for this purpose, as datasets are used for disconnected environment. 

OR 

I shall first fetch the whole ITEM table from the database on to a GridView , & display it when the Form is opened. 

now, when text is entered in the textbox , then it would not fetch data from the sql database, but would search in the GridView, so would this be faster?

which way would be efficient?

The item table has 3.4 million records.