Реализация поиска по таблице 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 шт):
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" что значит? Вы сами это сможете сказать спустя несколько месяцев?