2009-03-19 11 views
17

Sto cercando di creare SQL per una query con parametri in C# per una query che conterrà il comando LIKE %%.C# che costruisce query di parametri SQL - 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;

  • Aggiungendo il carattere % al parametro,

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

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

io non riesco a farlo funzionare, come posso utilizzare un parametro per la query LIKE per funzionare.

I suggerimenti sono benvenuti!

+0

sembra che ci sia un codice mancante, dove stai assegnando il codice SQL al comando? Quale errore si sta ottenendo o il risultato della query non è esattamente quello che ci si aspetta? –

+0

sì, SQL viene assegnato al parametro Cmd.CommandText. –

risposta

26

Non è possibile 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" + "%"); 
+0

un esempio sarebbe? sembra che tu abbia appena copiato il mio codice. –

+0

Prestare maggiore attenzione: ha spostato le carte jolly sul parametro. Questo funzionerà, ma imo è il modo sbagliato per farlo. –

+0

@ Myhiad: Si noti che c'è solo? dopo l'operatore simile, senza caratteri jolly e senza apostrofi. – Guffa

-5

In passato, in questo caso, l'ho semplicemente integrato in sql, assicurandomi di sostituire le virgolette singole con punti interrogativi per gestire l'iniezione sql. Es .:

+1

Sarebbe meglio sostituire le virgolette singole con due virgolette singole, in modo che le ricerche legittime incluse le virgolette funzionino effettivamente. 'Sostituisci (" '","' '")' – Blorgbeard

+2

espone agli attacchi sql injection – Ricibald

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

questo SQL è valido per Firebird? –

+0

Non ho visto il requisito Firebird. Ho aggiornato lo sql per assicurarmi che sia corretto, ma il codice del parametro è errato perché l'enumerazione SqlDbType era destinata al server Sql. Mi piace ancora evitare AddWithValue, anche se –

+0

questo non funziona proprio per me. Sto ottenendo il seguente errore; FirebirdSql.Data.FirebirdClient.FbException: SQL dinamico Errore valutazione delle espressioni non supportato ----> FirebirdSql.Data.Common.IscException: eccezione di tipo 'FirebirdSql.Data.Common.IscException' stato gettato. –