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

  1. #21
    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
    Quand je lance l'appli, Resultat.CommandText vaut "SELECT UserNom, UserPrenom FROM User WHERE 1=1 OR UserNom LIKE @ OR UserPrenom LIKE @;"
    Du coup, c'est vraiment le fait qu'il prend pas en valeur les éléments de la textbox... Donc un soucis au niveau du "varname" je pense... Alors que le tableau "words" rassemble bien les "word" de ce TextBox...

    Je ne peux pas concaténer la chaine directement, sinon cela me souligne mon "UserNom", "UserPrenom" et varname avec comme erreur: " ; attendue " , mais quand je change les virgules en points-virgules (j'ai testé au cas où même si je trouve ça bizarre), cela me fait l'erreur: "Seule une assignation, un appel,..., peuvent être utilisés comme instruction". De plus, si je met un point d'arrêt au niveau du Recherche.CommandText juste après ce changement, cela ne s'arrête même plus et me met directement l'erreur: " La variable scalaire "@" doit être déclarée. " ...

  2. #22
    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
    La seul explication est que varname est vide. Je ne vois plus dans ton code l'initialisation de la variable avec le compteur...

  3. #23
    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
    La seul explication est que varname est vide. Je ne vois plus dans ton code l'initialisation de la variable avec le compteur...
    Justement, j'ai posé la question un peu plus haut de ce qu'on faisait du compteur dans le code car je ne savais plus où l'initialiser, et du coup je ne l'utilisais pas dans le dernier code...

  4. #24
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Bon voici un code écrit à la va vite mais testé (même si je pense qu'une procédure stockée serai plus appropriée) :
    Requête complète de la table :
    Nom : dataExemple.jpg
Affichages : 65
Taille : 47,5 Ko

    Code :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
                using (var connection = new System.Data.SqlClient.SqlConnection(
                    @"Data Source=(localdb)\v11.0;Initial Catalog=VetOffice;Integrated Security=True;"))
                {
                    using (var command = new System.Data.SqlClient.SqlCommand())
                    {
                        command.Connection = connection;
                        command.CommandType = System.Data.CommandType.Text;
                        string textToSearch = "Cat Dar Joe";
                        //On construit la requête :
                        var builder = new System.Text.StringBuilder();
                        builder.Append("SELECT * FROM dbo.Patients WHERE 1=1 AND ");
                        var words = textToSearch.Split(' ');
                        int indexWord = 0;
                        foreach (var word in words)
                        {
                            if (indexWord != 0)
                            {
                                builder.Append(" OR ");
                            }
                            builder.AppendFormat(" Name LIKE @{0}{1} OR AnimalType_Species LIKE @{0}{1} ", "word", indexWord);
                            indexWord++;
                        }
     
                        command.CommandText = builder.ToString();
     
                        //On ajoute les paramètres :
                        for (int i = 0; i < indexWord; i++)
                        {
                            var parameterName = "word" + i;
                            command.Parameters.Add(parameterName, System.Data.SqlDbType.VarChar).Value = "%" + words[i] + "%";
                        }
     
                        try
                        {
                            connection.Open();
                            var dataReader = command.ExecuteReader();
     
                            while(dataReader.Read())
                            {
                                Console.WriteLine("{0} - {1} | {2}", dataReader[dataReader.GetOrdinal("Id")],
                                    dataReader[dataReader.GetOrdinal("Name")], dataReader[dataReader.GetOrdinal("AnimalType_Species")]);
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.BackgroundColor = ConsoleColor.Red;
                            Console.WriteLine(ex.Message);
                        }
                        finally
                        {
                            connection.Close();
                            Console.ResetColor();
                        }
                    }
    Il faut bien faire attention à mettre des espaces au début et à la fin des append et appendFormat pour éviter de mal concaténer les chaines (éviter que "AND" et "Name" se retrouve comme ceci : "ANDName") .

    On a retrouvé :
    • les chats qui contiennent "Cat" dans la colonne "AnimalType_Species"
    • "Darwin" et "Radar" qui contiennent "Dar" dans la colonne Name
    • "JoeFish" qui contient "Joe" dans la colonne Name

    Nom : dataExemple2.jpg
Affichages : 67
Taille : 20,2 Ko

  5. #25
    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
    Tant mieux si ca marche, attention stringBuilder est intéressant à partir du moment ou il y a un grand nombre de concaténations (centaines voir milliers) sinon une concaténation simple est plus indiqué...

  6. #26
    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
    Je vous remercie tous les deux pour votre aide et de m'avoir aidé jusque là.

    Je cherchais vraiment à comprendre ce code, comment il se déroulait et pourquoi... Merci, car j'ai réussi à comprendre chaque ligne. J'y ai passé l'après-midi, mais je suis parvenue à faire "marcher" le code.

    Mon but maintenant est de passer par une procédure stockée. Je vous avoue que je suis encore dans le flou. Si jamais vous connaissez des tutos ou autre, n'hésitez pas... J'ai cherché des exemples sur le net par rapport à mon cas mais j'avoue pour le moment ne pas trouver.

    Bref, encore un GRAND merci à vous deux!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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