немедленный выбор данных из базы данных sql из текстового поля winforms - PullRequest
0 голосов
/ 17 марта 2011

Я использую 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, так что это будет быстрее?

в какую сторонуэффективен?

В таблице предметов 3,4 миллиона записей.

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Да. Использование набора данных и поиск по нему будет намного быстрее. Поскольку вы используете WinForms, использование памяти, вероятно, также не является проблемой, если только вы не извлекаете огромное количество строк из базы данных.

Кроме того, вам, вероятно, не следует искать при каждом изменении текста, а подождать некоторое время, скажем, 2 секунды, в течение которого нет изменений в текстовом поле, а затем извлечь. В противном случае вы будете получать любой новый символ, введенный в текстовое поле (я думаю).

1 голос
/ 17 марта 2011

Лучшим подходом будет использование DataSet / DataTable. Прочитайте все данные из таблицы в форме загрузки и сохраните их в форме.

1 голос
/ 17 марта 2011

Насколько велика таблица ваших предметов?

Если она не большая, достаточно просто сохранить ее в наборе данных.Используйте то же самое текстовое поле, но ищите в наборе данных.

Если оно большое, я бы предложил использовать таймер.При каждом обмене текстами перезапустите таймер, возможно, на 0,5 секунды.по истечении таймера выполняется запрос только к базе данных.Это предотвращает множественные запросы, когда пользователь печатает.

В качестве альтернативы, если вы можете прочитать всю таблицу и присвоить ее AutoCompleteCustomSource:

textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
    textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...