2010-12-01 10 views
12

Ich versuche, eine SQL-Abfrage wieC# SQLite Parameterized Wählen Sie LIKE

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

Dies funktioniert in einfachen SQL zu tun, aber wenn ich System.Data.SQLite in C# verwenden, es funktioniert nur mit einem Literal, kein Parameter wie

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

Dies gibt keine Ergebnisse zurück.

Antwort

21

Sie können das nicht tun. Die Parameter müssen vollständige Werte sein - es handelt sich nicht nur um eine String-Substitution in SQL. Sie könnten dies stattdessen tun:

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

'String sel =„SELECT * FROM [TABLE], wobei Hostnamen wie ' % '+ @ Host +'% '";" würde auch funktionieren. – Donnie

+0

Dank Mark - das hat eine Tonne geholfen. Donnie - Ich habe es früher versucht und es schien nicht für mich zu funktionieren. – AdamC

+0

hat gerade die gleiche Situation in Ruby mit Sqlite3 gefunden, und Ihre Lösung hat auch dort wie ein Champion funktioniert. Upvote, der aus irgendeinem Grund mit einer Kick-Linie von Ponys auf meinem Bildschirm getroffen wurde? :/ –

5

Der einfachste Weg, dies zu tun ist, verwenden Sie '||'

Verwendung:

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

Statt:

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

Ich habe bereits beantwortet here

+0

Danke dafür! Ich war auf der Suche nach einer Möglichkeit, die "%" - Zeichen in den Suchparameterwert zu schreiben. Ich sehe, dass @Thunderforge die angenommene Antwort kommentiert hat und im Wesentlichen gesagt hat, was du hier gesagt hast, aber das hätte ich nicht bemerkt, ohne deine Antwort zuerst gesehen zu haben. –