C # строит запрос параметров SQL - LIKE% - PullRequest
17 голосов
/ 20 марта 2009

Я пытаюсь построить SQL для запроса параметров в C # для запроса, который будет содержать команду 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.

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

Ответы [ 3 ]

27 голосов
/ 20 марта 2009

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

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME);
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
4 голосов
/ 20 марта 2009
var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME);
Cmd.CommandText = SQL;
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN";
0 голосов
/ 20 марта 2009

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

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