C # SQL construction de requête de paramètres - comme%
-
21-08-2019 - |
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!
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("'","?"));