2016-06-01 5 views
2

Ich muss die sql Datenbank basierend auf der Benutzereingabe für 4 Spalten in einer asp.net Web-Anwendung filtern. In dieser Situation können sie alle vier Spalten oder eine Spalte oder 2 usw. auswählen oder nicht. Alles was ich habe ist 2^4 (16) Möglichkeiten. Was ist die beste Methode zum Filtern?Filter die Datenbank

Mein gui Screenshot:

screenshot

Bitte leite mich.

Ich schrieb eine Abfrage für die Auswahl eines der vier:

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

können Sie bitte Ihre aktuelle Abfrage zeigen? – navnit

+2

Yieks! Bitte verwenden Sie parametrisierte Abfragen, da dies zu SQL-Injection führt. – Adwaenyth

+0

Diese Abfrage parametrieren !! – Takarii

Antwort

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, es funktioniert gut! – Kayathiri

0

Versuch unter Abfrage.

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

Nein .. Es sortiert nicht. Immer das gleiche Ergebnis geben. – Kayathiri

+1

versuchen Sie, die unten angegebene Antwort von Moumit auf meine Antwort zu verwenden. Was ist passender als meine Antwort? – navnit

0

Erstellen Sie Ihre WHERE -Klausel dynamisch und die Parameter.

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

Warum 'ODER'? Und warum '{1}'? – Serg

+0

Thx, '{0}' natürlich zweimal ... 'OR' wie im Filter ist nicht exklusiv ... hängt von der Filterlogik ab, die Sie natürlich erstellen möchten. 'UND' wenn es alle Eigenschaften erfüllen muss ... – Adwaenyth