2010-12-01 16 views
12

que estoy tratando de hacer una consulta SQL comoC# SQLite parametrizado Seleccionar utilizando como

SELECT * FROM [TABLE] WHERE hostname LIKE '%myhostname%'; 

Esto funciona bien en SQL normal, pero cuando se utiliza System.Data.SQLite en C#, sólo funciona con una literal, no un parámetro, como

string sel = "SELECT * FROM [TABLE] WHERE hostname LIKE '%@host%'"; 
... 
command.Parameters.AddWithValue("@host", "myhostname"); 

Esto no devuelve ningún resultado.

Respuesta

21

No puede hacer eso. Los parámetros deben ser valores completos; no es solo una sustitución de cadena en el SQL. Usted puede hacer esto en su lugar:

string sel = "SELECT * FROM [TABLE] WHERE hostname LIKE @host"; 
... 
command.Parameters.AddWithValue("@host", "%myhostname%"); 
+4

'sel cadena = "SELECT * FROM [TABLA] donde nombre de host como " % '+ @ host +'% '";' también funcionaría. – Donnie

+0

Gracias Mark: esto ayudó mucho. Donnie - Intenté esto antes y no pareció funcionar para mí. – AdamC

+0

acaba de encontrar la misma situación en Ruby con Sqlite3, y su solución también funcionó como un campeón. Upvote, que por alguna razón se encontró con una patada de ponys en mi pantalla? :/ –

5

La manera más fácil de hacer esto es utilizar '||'

Uso:

const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName || '%' "; 

En lugar de:

const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName%"; 

ya he contestado here

+0

¡Gracias por esto! Estaba buscando una forma de hacerlo: tener que poner los caracteres "%" en el valor del parámetro de búsqueda. Veo que @Thunderforge comentó la respuesta aceptada básicamente diciendo lo que dijo aquí, pero no me habría dado cuenta de eso sin ver primero su respuesta. –

Cuestiones relacionadas