IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Variable non unique dans un traitement de requête suite à une boucle


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 34
    Par défaut Variable non unique dans un traitement de requête suite à une boucle
    Bonsoir tout le monde ,

    C'est encore moi (à croire que je passe ma vie sur les forums... Presque ), suite à ce topic...
    Alors voilà, j'ai une barre de recherche sur mon site web en ASP.NET, qui permet d'afficher dans un tableau le résultat de ce qu'à taper l'utilisateur. Mon code fonctionne quand l'utilisateur ne rentre qu'un seul mot, par contre dès qu'il veut en rentrer plusieurs, c'est la cata.

    Je cherche depuis le début de l'aprem une solution: J'ai regardé s'il était possible de mettre plusieurs valeurs à un "LIKE" comme on peut le faire avec un "IN" mais nada.. Enfin on ne peut pas d'après ce que j'ai lu. Et remplacer mon "LIKE" par un "IN" changerait toute la donne... Voici mon code (en C#) pour le moment, qui se déroule lors du clique du bouton "Rechercher", une fois que l'utilisateur a tapé les mots recherchés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Connexion = new SqlConnection("Data Source=**;Initial Catalog=**;Integrated Security=True");
                    SqlCommand Recherche = new SqlCommand("Select UserID, UserNom, UserPrenom FROM User WHERE UserNom LIKE @motclef OR UserPrenom LIKE @motclef", Connexion);
                    Connexion.Open();
     
                    String[] words = TextBoxSearch.Text.Split(' ');
     
     
                    foreach (String word in words)
                   {
                        Recherche.Parameters.Add("motclef", SqlDbType.NVarChar).Value = '%' + word + '%';
                    }
     
                    SqlDataReader Lecture = Recherche.ExecuteReader();
                    Gridview.DataSource = Lecture;
                    Gridview.DataBind();
                    Lecture.Close();
    Mon Gridview correspond donc à un tableau récapitulatif de ma recherche, et le TextBoxSearch, aux mots rentrés par l'utilisateur. Quand je teste avec un seul mot, pas d'erreur. Par contre, quand je teste avec deux, j'ai l'erreur suivante:
    "Le nom de variable '@motclef' a déjà été déclaré. Les noms de variables doivent être uniques dans un traitement de requêtes ou une procédure stockée."
    Ce qui est normal puisque dans ma boucle ma variable est "créée" plusieurs fois. Or, je n'ai pas d'autres idées de comment faire... J'ai tenté avec une boucle While mais idem.

    Comment je pourrai stocker cette variable et la reprendre ensuite dans ma requête? Je m'y prend peut être pas comme il faut...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int cpt = 0;
    string sql = "SELECT....WHERE 1=1 ";
     foreach (String word in words)
                   {
                        string varname = "motclef" + (++cpt);
                        Recherche.Parameters.Add(varname , SqlDbType.NVarChar).Value = '%' + word + '%';
                        sql += String.Format(" OR {0} like {1}","tonfieldname",varname); 
                    }
    Voici un exemple...

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 34
    Par défaut
    Bonjour Dokho1000,

    Merci (encore ) pour ton aide. Le soucis est qu'il me demande de déclarer ma variable scalaire @motclef, comme je ne l'utilise plus dans mon "Recherche.Parameters.Add". J'ai tenté de le mettre en dure, sans passer par varname mais rien n'y fait.
    De puis, je n'arrive pas à comprendre la requête SQL, enfin du moins l'utilité (même si je me doute que c'est en rapport avec le compteur...), ni même savoir quand est-ce qu'on l'a "lance"...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    dans mon script j'ai oublié le "@" devant {1}
    Tu la lances apres le foreach...

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 34
    Par défaut
    Citation Envoyé par Dokho1000 Voir le message
    dans mon script j'ai oublié le "@" devant {1}
    Tu la lances apres le foreach...
    Ok, je viens de rajouter mon @ devant le {1} de LIKE dans ma variable "sql". Il n'y a plus l'erreur du @motclef. Par contre, j'ai cette erreur:
    "Le format de la chaîne d'entrée est incorrect.".

    Pour la variable sql, ne vaut-il pas mieux que je la mette en SqlCommand plutôt que String? Car comment la lancer ensuite?
    Et pour le "fieldname" (ligne 8 de ton code), je le remplace par "TextBoxSearch.Text"?

    Excuse moi de te poser toutes ces questions, j'essaye de comprendre ...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Met ton code modifié...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copie d'une variable non reconnue dans une fonction
    Par paragoge dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/10/2009, 13h30
  2. Variable non stockée dans une fonction
    Par LaVaZza dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/07/2009, 17h49
  3. Réponses: 2
    Dernier message: 15/12/2008, 18h04
  4. Variable non évaluée dans la balise
    Par Mister Nono dans le forum Struts 1
    Réponses: 2
    Dernier message: 16/11/2007, 15h12
  5. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo