2016-06-23 6 views
1

Hier ist mein Problem. Ich habe eine TextBox, in der Recherche mit Keyword realisiert werden kann. Ich habe eine Checkliste mit verschiedenen Themen (ADV, Logistik, Finanzen, Verwaltung), um die SQL-Abfragen zu filtern. Wenn ich nach einem Schlüsselwort suche und "logistic" ankreuze, wird das Ergebnis nur mit "Logistic" verknüpft. Dies funktioniert gut, das Problem ist, dass, wenn ich 2 Checkbox, "Logistik" und "Finanzen" zum Beispiel, ich nur Ergebnis im Zusammenhang mit "Logistik" haben würde, aber ich möchte die 2 Ergebnisse haben .. Ich machte es funktioniert wie Vor 20 Minuten und plötzlich funktioniert nicht mehr ich nicht warum. Kann mir jemand sagen, was ich vermisse?C# Probleme mit dem Filtern von SQL-Abfrage von checkboxlist

Hier ist mein Code:

string word = tbSearch.Text; 

string strSql = @"SELECT CAST(ID as VarChar(50)) ID, Aggregation, DateDerniereSolution, DateDescription, DerniereSolution, DescriptionDemande, FileDeTraitement, NomContact, Numero, SousRubrique, TitreDemande 
       FROM cfao_DigiHelp_index.DigiHelpData WHERE (1 = 1)"; 

string selectedValue = ""; 
bool IsFirst = false; 
strSql += @" AND ("; 

foreach (ListItem item in CheckboxID.Items) 
{ 
    if (item.Selected) 
    { 
     selectedValue += item.Value ; 

     if (IsFirst) 
     { 
      strSql += " OR "; 
     } 

     strSql += " SousRubrique Like '%" + selectedValue + "%' "; 
     IsFirst = true; 
    } 

    if (CheckboxID.SelectedIndex == -1) 
    { 
     Label2.Visible = true; 
     Label2.Text = "Veuillez cocher au moins une rubrique"; 
    } 
} 

strSql += @" )"; 
+0

Können Sie die Abfrage posten? – Berkay

+0

Was Sie mit "funktioniert nicht mehr" meinen, erhalten Sie einen Fehler oder nicht die erwartete Ausgabe? –

Antwort

1

Diese Linie

selectedValue += item.Value ; 

verheerend Ihre Frage, weil bei jeder Schleife halten Sie auf dem selectedValue des geprüften Punkt den Wert verketten. Gerade die item.Value Auch

strSql += " SousRubrique Like '%" + item.Value + "%' "; 

verwenden, wenn Ihre markierten Produkte entsprechen genau den SousRubrique Inhalt könnte man vermeiden, dass die LIKE und die wilden Suchmuster „%“ verwenden, aber Sie werden die gleichen Betreiber

Halt Beachten Sie, dass Sie eine strenge Kontrolle über den Inhalt Ihrer checkedlistbox haben müssen, denn wenn Ihr Benutzer den Wert für SousRubrique schreiben kann, wird Ihr Code einem Sql Injection-Angriff ausgesetzt.

+0

Vielen Dank! – Fanto