2010-12-01 8 views
12

私はこれが普通のSQLでは正常に動作などC#SQLiteのパラメータ化された選択LIKE使用

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

のSQLクエリを実行しようとしていますが、私はC#でSystem.Data.SQLiteを使用する場合、それだけで動作しますリテラルではなく、パラメータではありません。

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

これは結果を返しません。

答えて

21

これはできません。パラメータは完全な値でなければなりません.SQLへの文字列置換だけではありません。

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

に答えています% '+ @ host +'% '";'も有効です。 – Donnie

+0

ありがとうマーク - これはトンを助けた。 Donnie - 私はこれを早く試してみましたが、それは私にとってはうまくいかないようでした。 – AdamC

+0

はRubyでSqlite3と同じ状況に遭遇しました。あなたのソリューションはそこでもチャンピオンのように働いていました。何らかの理由でアップ画面が私の画面上でポニーのキック・ラインで会ったのですか? :/ –

5

これを行う最も簡単な方法は、 '||'を使用することです。

用途:

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

の代わり:

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

私はすでに `文字列SELは=「ここで、hostname 'のような[TABLE] SELECT * FROM here

+0

ありがとう!私はそれを "%"文字を検索パラメータの値に入れなければならない方法を探していました。私は@Thunderforgeが基本的にあなたがここで言ったことを言って受け入れられた答えにコメントしたが、私はあなたの答えを最初に見ることなく気づいていないだろうと思う。 –

関連する問題