C# .NET pb avec filtrage sql par checkboxlist

Résolu
Fantominuss Messages postés 5 Date d'inscription mercredi 22 juin 2016 Statut Membre Dernière intervention 30 juin 2016 - Modifié par Fantominuss le 23/06/2016 à 16:22
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 24 juin 2016 à 11:02
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 ?

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
24 juin 2016 à 09:49
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagaD.scar le 24/06/2016 à 10:28
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
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagaD.scar le 24/06/2016 à 10:30
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
0
Fantominuss Messages postés 5 Date d'inscription mercredi 22 juin 2016 Statut Membre Dernière intervention 30 juin 2016
24 juin 2016 à 10:38
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 :)
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
24 juin 2016 à 11:02
pas de soucis bon dev ^^

naga
0
Rejoignez-nous