2016-06-01 2 views
2

웹 응용 프로그램 asp.net에서 4 열의 사용자 입력을 기반으로 sql 데이터베이스를 필터링해야합니다. 이 상황에서는 4 열 또는 1 열 또는 2 등을 모두 선택할 수 있습니다. 내가 가진 것은 모두 2^4 (16) 가능성입니다. 필터링하는 가장 좋은 방법은 무엇입니까?데이터베이스 필터링

gui 스크린 샷 :

screenshot

나를 인도 해주십시오. 쿼리 아래

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

시도 :

나는 1 ~ 4의 선택에 대한 쿼리를 썼다.

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

내 답변에 아래 주어진 Moumit 대답을 사용해보십시오. 더 적절한 대답은 내 것이다. – 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}'두 번 ... 필터 에서처럼'OR'은 배타적이지 않습니다 ... 당신이 물론 만들려는 필터 논리에 달려 있습니다. 모든 속성을 충족해야한다면 'AND'... – Adwaenyth