2016-06-01 1 views
2

asp.net Webアプリケーションで4列のユーザ入力に基づいてsqlデータベースをフィルタリングする必要があります。この状況では、4つの列すべて、1つの列または2つなどを選択することができます。私が持っているのは2^4(16)の可能性だけです。フィルターにはどのような方法が最適ですか?データベースをフィルタリングする

マイguiスクリーンショット:

screenshot

私を導いてください。

私は4の1つの選択のためのクエリを書いた:

SELECT acct_number AS AccountNo, 
    cust_lname AS Name 
FROM List 
WHERE (ordr_date='" + orderdate + "' 
    OR reader_code='" + rdrCode + "' 
    OR dly_pack_no='" + dlyPack + "' 
    OR walk_seq='" + wlkSeq + "') 
+1

現在のクエリを表示できますか? – navnit

+2

Yieks!これはSQLインジェクションを受けやすいため、パラメータ化されたクエリを使用してください。 – Adwaenyth

+0

そのクエリをパラメータ化します! – Takarii

答えて

3
SELECT acct_number AS AccountNo, 
     cust_lname AS Name 
FROM List 
WHERE (ISNULL(orderdate,'')='' OR ISNULL(ordr_date,'')='' OR ordr_date='" + orderdate + "') 
    AND (ISNULL(rdrCode,'')='' OR ISNULL(reader_code,'')='' OR reader_code='" + rdrCode + "') 
    AND (ISNULL(dlyPack,'')='' OR ISNULL(dly_pack_no,'')='' OR dly_pack_no='" + dlyPack + "') 
    AND (ISNULL(wlkSeq,'')='' OR ISNULL(walk_seq,'')='' OR walk_seq='" + wlkSeq + "') 
+0

Thx、うまく動作します! – Kayathiri

0

は、クエリの下にしてみてください。

SELECT acct_number AS AccountNo , 
    cust_lname AS Name 
FROM List 
WHERE (ordr_date = '" + orderdate + "' 
     OR " + orderdate + " = " + orderdate + " 
    ) 
    AND (reader_code = '" + rdrCode + "' 
      OR " + rdrCode + " = " + rdrCode + " 
     ) 
    AND (dly_pack_no = '" + dlyPack + "' 
      OR " + dlyPack + " = " + dlyPack + " 
     ) 
    AND (walk_seq = '" + wlkSeq + "' 
      OR " + wlkSeq + " = " + wlkSeq + " 
     ) 
+0

いいえ。ソートされません。常に同じ結果を与えます。 – Kayathiri

+1

私の答えに以下の答えを与えてください。それはより適切な答えです。 – navnit

0

あなたWHERE動的-clauseと使用パラメータを構築します。

SqlCommand select = new SqlCommand(@"SELECT acct_number AS AccountNo, 
    cust_lname AS Name 
    FROM List "); 

if(!string.IsNullOrWhiteSpace(orderDate)) // use appropriate logic according to data type. I'm assuming string atm. 
select.Parameters.Add(new SqlParameter() { ParameterName = "@ordr_date", Value = orderDate, SqlDbType = SqlDbType.NVarChar }); 

// Repeat for each parameter and then... 

for(int i = 0; i < select.Parameters.Count; i++) 
{ 
    if(i == 0) 
     select.CommandText += " WHERE "; 
    else 
     // OR as in the filter is not exclusive... depends on the filter logic you want to construct of course. 
     // AND if it has to fulfill all properties 
     select.CommandText += " OR "; 
    select.CommandText += string.Format("{0} = {0}", select.Parameters[i].Name).Substring(1); 
} 
+0

なぜ「OR」ですか?そしてなぜ「{1}」? – Serg

+0

Thx、もちろん '{0}'は2回目です...フィルタのように 'OR'は排他的ではありません...あなたがもちろん構築したいフィルタロジックに依存します。すべての特性を満たさなければならない場合は、「AND」... – Adwaenyth

関連する問題