Реализация поиска по таблице mssql через C#

Не работает поиск по БД. По идее, после нажатия по кнопке, в DataGridView должны оставаться только подходящие записи, но этого не происходит. Также, после нажатия кнопки, в DataGridView изменяется та запись, которую я хотел найти.

private void search_pl_but_Click(object sender, EventArgs e)
{
    connection.Open();
    if (фИОПловцаTextBox.Text != "" || фИОПловцаTextBox.Text != " ")
    {
        пловцыDataGridView.DataSource = "";
        SqlDataAdapter dataAdapter = new SqlDataAdapter($@"SELECT * FROM Пловцы WHERE ФИОПловца LIKE '%{фИОПловцаTextBox.Text}%'", connection);
        dataAdapter.Fill(swimmingPoolDataSet, "Пловцы");
        пловцыDataGridView.DataSource = swimmingPoolDataSet.Tables["Пловцы"];
    }
    else
    {
        load_data();
    }

    connection.Close();
}

Ответы (1 шт):

Автор решения: Alexander Petrov
if (...Text != "" || ...Text != " ")

Это условие выполняется всегда. Соответственно, ветка else не выполнится никогда.


Читаем документацию. Описание метода DataAdapter.Fill:

Добавляет или обновляет строки

То есть при каждом запросе вы добавляете новые строки в датасет. Старые при этом не удаляются.
Удалить их можно, например, методом Clear().


Если в вашем коде произойдёт исключение, то соединение останется открытым.

Вообще, датаадаптер сам открывает и закрывает соединение. Можно не вмешиваться в этот процесс.


Вот слегка облагороженный код.

private void search_pl_but_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrWhiteSpace(фИОПловцаTextBox.Text))
    {
        swimmingPoolDataSet.Tables["Пловцы"]?.Clear();

        string sql = "SELECT * FROM Пловцы WHERE ФИОПловца LIKE @name";
        string name = $"%{фИОПловцаTextBox.Text}%";

        using (var dataAdapter = new SqlDataAdapter(sql, connection))
        {
            dataAdapter.SelectCommand.Parameters.Add("name", SqlDbType.NVarChar).Value = name;
            dataAdapter.Fill(swimmingPoolDataSet, "Пловцы");
        }

        пловцыDataGridView.DataSource = swimmingPoolDataSet.Tables["Пловцы"];
    }
    else
    {
        load_data();
    }
}

Конечно, крайне желательно убрать кириллицу из кода.
Имена таблиц и sql-запросы не должны быть прописаны повсеместно в коде. Они должны браться из ресурсов или настроек. Или хотя бы заданы константами.

search_pl_but - что это за название? "but" - сокращеие от "butt"? А "pl" что значит? Вы сами это сможете сказать спустя несколько месяцев?

→ Ссылка