Я строю очень простую поисковую систему для сайта работы. Он имеет 3 необязательных поля ввода, термин, категорию и работодателя. Термины и поля работодателя - это текстовый ввод, а категория - раскрывающийся список. Логика поиска очень глупа, сложна и не масштабируема, но этот поиск предназначен для использования всего один раз, и все, что мне нужно от него, это то, что оно работает в нескольких случаях, и поскольку у меня есть более важные вещи, которые нужно делать в то время, когда я сделал Я попытался сделать это лучше.Запрос возвращается 0 строк
Это метод, который возвращает DataSet с результатами поиска.
private DataSet GetResults(string term, string category, string employer)
{
string query = "SELECT * FROM Jobs ";
MySqlConnection conn = DBConnection.Connect();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
if (String.IsNullOrEmpty(term) && String.IsNullOrEmpty(category) && String.IsNullOrEmpty(employer))
{
cmd.CommandText = query;
}
else
{
query += "WHERE ";
if (!String.IsNullOrEmpty(term))
{
query += "Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";
if (!String.IsNullOrEmpty(category))
query += "AND Category = @category ";
if (!String.IsNullOrEmpty(employer))
query += "AND Title LIKE '%@employer%' AND Job_Desc LIKE '%@employer%' ";
}
else if (!String.IsNullOrEmpty(category))
{
query += "Category = @category ";
if (!String.IsNullOrEmpty(term))
query += "AND Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";
if (!String.IsNullOrEmpty(poduzece))
query += "AND Title LIKE '%@employer%' OR Job_Desc LIKE '%@employer%' ";
}
else if (!String.IsNullOrEmpty(employer))
{
query += "Naziv LIKE '%@employer%' OR Job_Desc LIKE '%@poduzece%' ";
if (!String.IsNullOrEmpty(term))
query += "AND Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";
if (!String.IsNullOrEmpty(category))
query += "AND Category = '@category' ";
}
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@term", term.Trim());
cmd.Parameters.AddWithValue("@category", category.Trim());
cmd.Parameters.AddWithValue("@employer", employer.Trim());
}
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
DataSet searchResult = new DataSet();
dataAdapter.Fill(searchResult);
conn.Close();
return searchResult;
}
Проблема заключается в следующем. Когда я ищу только для термина или работодателя, я получаю 0 строк в обратном, но я получаю результаты для категории, которая выбрана из раскрывающегося списка и не запрашивается с условием LIKE, но с =. Сначала я предполагал, что у меня что-то не так с операторами LIKE и с OR и AND, но когда я вручную запрашиваю базу данных с тем же запросом, который встроен в код, я получаю результаты. Мое следующее предположение, что у меня что-то не так с параметрами, потому что, если я заменяю местозаполнители параметров фактическим пользовательским запросом, я получаю результаты.
Это работает. query + = "Title LIKE '% C programmer%' ИЛИ Job_Desc LIKE '% C programmer%'";
Спасибо за помощь и извините за плохой английский. :)
Вы ищете что-то вроде «Название LIKE»% »+ термин +% 'ИЛИ Job_Desc LIKE'%" + термин + "% '' ?? –