Поиск файлов в combobox по его содержимому

У меня есть combobox, который отображает файлы .docx и pdf. В бд храню имя документа и ссылку на него. В приложении могу открывать эти документы в отдельной форме. Я сделала поиск файла по его названию с помощью textbox, а также по содержимому файла. Но когда ввожу в textbox слово, которое есть в одном из файлов - combobox показывает пустой список.

private void FillComboBox()
 {
     // Очистка combobox
     comboBoxFiles.Items.Clear();

     // Выполнение запроса для получения имен файлов
     using (MySqlConnection connection = Database.GetConnection())
     {
         MySqlCommand command = new MySqlCommand("SELECT Name FROM document", connection);
         using (MySqlDataReader reader = command.ExecuteReader())
         {
             while (reader.Read())
             {
                 comboBoxFiles.Items.Add(reader["Name"].ToString());
             }
         }
     }
 }

 private void comboBoxFiles_SelectedIndexChanged(object sender, EventArgs e)
 {
     string selectedFileName = comboBoxFiles.SelectedItem.ToString();
     string filePath = GetFilePath(selectedFileName);

     if (!string.IsNullOrEmpty(filePath))
     {
         // Создать новую форму для отображения файла
         FormFileContent formFileContent = new FormFileContent(filePath);
         formFileContent.Show();
     }
 }

 private string GetFilePath(string fileName)
 {
     using (MySqlConnection connection = Database.GetConnection())
     {
         MySqlCommand command = new MySqlCommand("SELECT Content FROM document WHERE Name = @fileName", connection);
         command.Parameters.AddWithValue("@fileName", fileName);

         string filePath = (string)command.ExecuteScalar();

         return filePath;
     }
 }

 private void TextBoxSearch_TextChanged(object sender, EventArgs e)
 {
     string searchText = textBoxSearch.Text.Trim();
     FillComboBox(searchText);
 }

 // Перегруженный метод для поиска файлов
 private void FillComboBox(string searchText)
 {
     // Очистка combobox
     comboBoxFiles.Items.Clear();
     using (MySqlConnection connection = Database.GetConnection())
     {
         MySqlCommand command = new MySqlCommand("SELECT Name, Content FROM document WHERE Name LIKE @searchText OR Content LIKE @searchText", connection);
         command.Parameters.AddWithValue("@searchText", "%" + searchText + "%");
         using (MySqlDataReader reader = command.ExecuteReader())
         {
             while (reader.Read())
             {
                 // Формируем строку, содержащую имя и часть содержимого 
                 string itemText = $"{reader["Name"].ToString()} ({reader["Content"].ToString().Substring(0, Math.Min(reader["Content"].ToString().Length, 20))})";
                 // Добавьте имя файла в combobox
                 comboBoxFiles.Items.Add(itemText);
             }
         }
     }
 }

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

Автор решения: AlexanderSt

Попробуйте сделать

command.Parameters.AddWithValue("@searchText", "'%" + searchText + "%'");

вдруг банально дело в одиночных кавычках?

Уважаемый @aepot, конструкция вида

using MySqlConnection connection = new MySqlConnection(mySQL_ConnStr);
 using MySqlCommand cmd = new MySqlCommand
 {
     Connection = connection,
     CommandType = CommandType.Text,
     CommandText = $"SELECT id FROM my_table WHERE def LIKE @searchText ORDER BY Type ;"
 };
  cmd.Parameters.AddWithValue("@searchText", "%"+ searchText + "%");

преобразуется в

SELECT id FROM my_table WHERE def LIKE %Vasia% ORDER BY Type ;

что приводит к выбросу исключения. Я не просто так отметил одинарные кавычки, можно было бы дождаться реакции автора вопроса перед удалением моего ответа. И вот этот кусок кода:

private void TextBoxSearch_TextChanged(object sender, EventArgs e)
 {
     string searchText = textBoxSearch.Text.Trim();
     FillComboBox(searchText);
 }

 // Перегруженный метод для поиска файлов
 private void FillComboBox(string searchText)
 {
     // Очистка combobox
     comboBoxFiles.Items.Clear();
     using (MySqlConnection connection = Database.GetConnection())
     {
         MySqlCommand command = new MySqlCommand("SELECT Name, Content FROM document WHERE Name LIKE @searchText OR Content LIKE @searchText", connection);
         command.Parameters.AddWithValue("@searchText", "%" +searchText + "%");

прямо показывает, что пытается делаться фильтрация содержимого комбобокса, а не поиск строки в содержимом файла, как отмечают коллеги

→ Ссылка