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!

È stato utile?

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("'","?"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top