2017-06-27 12 views
0

Npgsqlを使用してデータベーステーブルをクエリし、ページ/ビューに結果を表示しています。 コードは、テーブルからビューにすべての行を取得するので、where句とパラメータなしで正常に動作します。今、私は検索文字列変数を組み込むことを試みています(ユーザーが文字列を入力してから、この文字列を含むテーブルレコードを与えてください)。次のように私のコードがある空の結果を返す検索変数パラメータを持つNpgsqlクエリC#Postgres

string searchValue = TempData["String"].ToString(); 

var model = new List<ProductViewModel>();  

NpgsqlConnection connection = new NpgsqlConnection 
    ("Host=192.168.0.52;Database=test;Username=test;Password=test"); 
connection.Open(); 
NpgsqlCommand cmd = new NpgsqlCommand 
    ("SELECT * FROM q_product WHERE q_description like @string", connection); 

     //lets include our paramater 
cmd.Parameters.Add("@string", NpgsqlTypes.NpgsqlDbType.Text); 
cmd.Parameters["@string"].Value = searchValue; 
cmd.Parameters.AddWithValue(searchValue); 

NpgsqlDataReader dr = cmd.ExecuteReader(); 

while (dr.Read()) 
{ 
    var prod = new ProductViewModel(); 
    prod.q_description = dr["q_description"].ToString(); 
    prod.q_barcode = dr["q_barcode"].ToString();    

    model.Add(prod); 
} 

var pagedProduct = new PaginatedSearch<ProductViewModel>(model, pageIndex, pageSize); 

return View(pagedProduct); 

レコードは、私だけ

SELECT * FROM q_product 

を持っていたときに罰金返されますが、where句と私の検索文字列変数を含めた後、私は空のページを取得しています。これに対して私のコードで何が間違っていますか?

+0

'searchValue'の内容は何ですか?また、['LIKE'](https://www.postgresql.org/docs/8.3/static/functions-matching.html)のドキュメントを見てください。 – 0xCAFEBABE

+0

のデバッグsearchValueは、いつも検索ボックスに入力したテキスト(期待される動作)です。 whileループをスキップし、where句が追加されるとpagedProductにまっすぐ進みます。私はドキュメンテーションを見ていきます。 – LavsTo

+1

[パラメータを使用したnpgsqlの同様のステートメントの可能な重複](https://stackoverflow.com/questions/13950279/like-statement-for-npgsql-using-parameter) – JGH

答えて

1

like演算子を使用するには、クエリに%を使用します。

NpgsqlCommand cmd = new NpgsqlCommand 
    ("SELECT * FROM q_product WHERE q_description like '%' || @string || '%'", connection); 
+0

私は正確に同じ空の結果。 – LavsTo

+0

欠落している '%'は私が得ていたものでした。その間にC#レイヤーを使用せずに、データベースに対して同じクエリを手動で実行して、そこに結果があるかどうかを確認することができます。 – 0xCAFEBABE

+0

は、アシスト@JGHと0xCAFEBABEのおかげで、適切な連結&自動パラメータ引用 – JGH

関連する問題