Pregunta

Estoy tratando de construir SQL para una consulta de parámetros en C # para una consulta que contendrá el comando LIKE %%.

Esto es lo que estoy tratando de acheive (tenga en cuenta que la base de datos Firebird es)

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

Ahora he intentado todos y cada uno de permutación para obtener el parámetro a trabajar, he tratado;

  • Adición de la % carácter para el parámetro,

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

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

Me parece que no puede conseguir que esto funcione, ¿cómo puedo usar un parámetro para la consulta como para trabajar.

Las sugerencias son bienvenidos!

¿Fue útil?

Solución

No se puede tener parámetros dentro de una cadena literal en la consulta. Hacer que todo el valor del parámetro, y añadir los comodines para la cadena:

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

Otros consejos

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

En el pasado cuando se hace esto, simplemente he integrado en el SQL, asegurándose de que puedo reemplazar comillas simples con signos de interrogación para hacer frente a la inyección de SQL. Por ejemplo:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
  TABLE,
  NAME,
  JOHN.Replace("'","?"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top