C # costruzione di query con parametri SQL - come%
-
21-08-2019 - |
Domanda
Sto cercando di costruire SQL per una query con parametri in C # per una query che conterrà il comando LIKE %%
.
Ecco quello che sto cercando di acheive (si prega di notare che il database è Firebird)
var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME);
cmd.Parameters.AddWithValue(NAME, "JOHN");
Ora ho provato ogni singola permutazione per ottenere il parametro di lavorare, ho provato;
-
L'aggiunta della
%
carattere al parametro,cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
-
o
cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'");
Non riesco a farlo funzionare, come posso utilizzare un parametro per la query piace lavorare.
I suggerimenti sono benvenuti!
Soluzione
Non si può avere parametri all'interno di una stringa letterale nella query. Rendere l'intero valore del parametro, e aggiungere i caratteri jolly per la stringa:
var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME);
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
Altri suggerimenti
var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME);
Cmd.CommandText = SQL;
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN";
In passato quando si fa questo, ho semplicemente integrato in SQL, facendo in modo che i sostituire le virgolette singole con punti interrogativi a che fare con SQL injection. Ad esempio:
var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
TABLE,
NAME,
JOHN.Replace("'","?"));