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

Fantominuss 5 Messages postés mercredi 22 juin 2016Date d'inscription 30 juin 2016 Dernière intervention - 23 juin 2016 à 12:50 - Dernière réponse : nagaD.scar 4225 Messages postés samedi 8 septembre 2007Date d'inscription 16 février 2018 Dernière intervention
- 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 ?
Afficher la suite 

5 réponses

Répondre au sujet
nagaD.scar 4225 Messages postés samedi 8 septembre 2007Date d'inscription 16 février 2018 Dernière intervention - 24 juin 2016 à 09:49
nagaD.scar 4225 Messages postés samedi 8 septembre 2007Date d'inscription 16 février 2018 Dernière intervention - 24 juin 2016 à 09:55
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 4225 Messages postés samedi 8 septembre 2007Date d'inscription 16 février 2018 Dernière intervention - 24 juin 2016 à 10:29
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 5 Messages postés mercredi 22 juin 2016Date d'inscription 30 juin 2016 Dernière intervention - 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 :)
nagaD.scar 4225 Messages postés samedi 8 septembre 2007Date d'inscription 16 février 2018 Dernière intervention - 24 juin 2016 à 11:02
pas de soucis bon dev ^^

naga
Commenter la réponse de nagaD.scar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.