Question

Je suis en train de construire SQL pour une requête de paramètre en C # pour une requête qui contiendra la commande LIKE %%.

Voici ce que je suis en train de acheive (s'il vous plaît noter que la base de données est Firebird)

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

Maintenant, j'ai essayé chaque permutation simple pour obtenir le paramètre à travailler, je l'ai essayé;

  • Ajout du % caractère au paramètre,

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

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

Je ne peux pas sembler que cela fonctionne, comment puis-je utiliser un paramètre pour la requête que de travailler.

Les suggestions sont les bienvenus!

Était-ce utile?

La solution

Vous ne pouvez pas avoir des paramètres à l'intérieur d'une chaîne littérale dans la requête. Faire toute la valeur du paramètre, et ajoutez les jokers à la chaîne:

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

Autres conseils

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

Dans le passé, quand vous le faites, je l'ai simplement intégré dans le sql, en vous assurant que je remplacer des guillemets simples avec des points d'interrogation pour faire face à injection sql. Par exemple:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
  TABLE,
  NAME,
  JOHN.Replace("'","?"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top