Подтвердить что ты не робот

С# построение запроса параметра SQL - LIKE%

Я пытаюсь построить SQL для запроса параметра в С# для запроса, который будет содержать команду LIKE %%.

Вот что я пытаюсь выполнить (обратите внимание, что база данных - это Firebird)

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME);
 cmd.Parameters.AddWithValue(NAME, "JOHN");

Теперь я пробовал каждую перестановку, чтобы заставить параметр работать, я пробовал;

  • Добавление символа % к параметру

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
    
  • или

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'");
    

Я не могу заставить это работать, как я могу использовать параметр для запроса LIKE.

Предложения приветствуются!

4b9b3361

Ответ 1

У вас не может быть параметров внутри строкового литерала в запросе. Сделайте все значение параметра и добавьте подстановочные знаки в строку:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME);
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");

Ответ 2

var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME);
Cmd.CommandText = SQL;
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN";

Ответ 3

В прошлом, когда я делал это, я просто интегрировал его в sql, убедившись, что я заменяю одинарные кавычки вопросительными знаками для обработки SQL-инъекций. Например:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
  TABLE,
  NAME,
  JOHN.Replace("'","?"));