C# .NET pb avec filtrage sql par checkboxlist [Résolu]

Messages postés
5
Date d'inscription
mercredi 22 juin 2016
Statut
Membre
Dernière intervention
30 juin 2016
-
Bonjour,

Je vous expose mon problème :

J'ai un champ qui permet de faire des recherches par mot clé dans la table de ma bdd. Afin de filtrer les demandes, j'ai fait une checkboxList, (ADV, Logistique, Finance, Administration...). Si un utilisateur coche la rubrique "logistique" la recherche lancée grace au mot clé ne renverra que des résultats concernant la rubrique "logistique". Le problème c'est que quand aucune rubrique n'est cochée, et que l'utilisateur appuie sur "OK" pour lancer la recherche cela me génère une OdbcException, et je ne sais pas comment la gérer, j'ai tester quelque code, seulement il est totalement ignoré, il n'a aucun effet, l'exception s'affiche toujours et pas mon message d'erreur.

Voici le code concernant le filtrage des requêtes:


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 += @" )";


if (!string.IsNullOrEmpty(word))
{
strSql += @" AND (DescriptionDemande LIKE '%" + word + "%' OR TitreDemande LIKE '%" + word + "%') ";
}


Quelqu'un sait-il comment gérer une Exception Odbc ?
Afficher la suite 

1 réponse

Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
Sinon, même si je pense aussi que cette méthode complique un peu la vie, peu import. Mais tu fais:

           
strSql += @" AND (";
foreach (ListItem item in CheckboxID.Items)
 {
                .
                .
                .
 }


strSql += @"  )";



du coup si aucuns filtres tu te retrouve avec
AND ()
qui lève l exception.

Du coup le plus simple serai de faire



    
string strSqlSub = "";
foreach (ListItem item in CheckboxID.Items)
{             
    if (item.Selected)
    {
             selectedValue +=  item.Value ;
             if (IsFirst)
             {
                 strSqlSub += " OR ";
             }
             else
             {
                 strSqlSub = "AND (";
             }
             strSqlSub += " SousRubrique Like '%" + selectedValue + "%' ";
             IsFirst = true;
     }
     if (CheckboxID.SelectedIndex == -1)
     {
         Label2.Visible = true;
         Label2.Text = "Veuillez cocher au moins une rubrique";
     }
}
if(strSqlSub != "")
    strSql  += strSqlSub + ")"


Ce n'est qu'une possibilité, y en a toujours pleins d'autres ^^

naga
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
Bon en fait je m y suis un peu plus penché et il y a 2/3 trucs qui ne vont pas dans ton code, du coup je l'ai repris :



if (CheckboxID.SelectedIndex == -1)
{
    Label2.Visible = true;
    Label2.Text = "Veuillez cocher au moins une rubrique";
}
else
{
    Label2.Visible = false; /*si l utilisateur a fait un passage sans sélection, ca restera affiché: on la retire donc*/
    Label2.Text = "";
    strSql += "AND (";
     foreach (ListItem item in CheckboxID.Items)
    {
        if (item.Selected)
        {
            selectedValue =  item.Value ; /*pas de += car sinon tu concatènes toutes les chaines de caractères en fonction de la séléction*/
            if (IsFirst)
            {
                strSql += " OR ";
            }
            strSql += " SousRubrique Like '%" + selectedValue + "%' ";
            IsFirst = true; 
        }
    }
}



naga
Fantominuss
Messages postés
5
Date d'inscription
mercredi 22 juin 2016
Statut
Membre
Dernière intervention
30 juin 2016
-
Salut merci beaucoup pour ta réponse, le sujet sur openclassroom ne concernait pas l'exception ODBC, du coup mon code marche maintenant meric a toi :)
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
pas de soucis bon dev ^^

naga
Commenter la réponse de nagaD.scar