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

C# Discussion :

Passer de string a variable ?


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut Passer de string a variable ?
    Bonjour à tous!

    Donc voilà, petit dilemme qui s'impose devant moi dont je n'arrive pas a trouver de solution concrète...

    En fait, j'ai un objet, disons pour le cas de l'exemple un élève.
    Je cherche un moyen qu'à partir d'une string provenant d'une BD, je puisse aller changer une valeur appartenant a un élève, admettons
    Eleve.Groupe = 5

    Je veux que dans ma BD je puisse avoir un moyen de déclencher une instruction qui fera que Eleve.Groupe incrémentera de 2

    Je ne sais pas trop si je suis clair... mais au bout du compte ou je voudrais en arriver c'est d'avoir une fonction avec laquelle je pourrait, a partir d'une string par exemple valant "Eleve.Groupe" ainsi que "2" comme paramètre, modifié la valeur dans mon objet

    J'espère être assez clair, faut admettre que je suis moi-même un peu perdu


    Sous un merci d'avance,
    Amuny,

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Honnêtement, là, le chinois passerait aussi....
    Essaie de tout recracher, de montrer des exemples et de ne pas trop faire de français...

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    Regarde du coté de la Réflexion, moi je l'utilise pour exécuter des méthodes d'une classe dont le nom est stocker dans ma base de donnée, je pense que tu peux par 'réflexion' modifier une variable de classe en ayant son nom et sa nouvelle valeur sous forme de string, mais je ne te garantis rien ....

    Par contre ce n'est pas si facile à assimiler -_-

    Bonne recherche et bonne chance !

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut Je me creuse la tête
    Bonjour,

    J'ai du m'arracher les cheveux pour rien ... j'ai pas compris ce que tu veux dire :

    1.
    ma BD je puisse avoir un moyen....
    tu veux avoir des procédures stockées ??? dans ce cas la pourquoi parles tu d'objets dans la mémoire?

    2. Si ce n'est pas des procedures stockées ou triggers de DB que tu cherches, Je présume que tu veux changer des propriétés d'un objet sans pour autant le connaitre (savoir de quel type il est ) : dans ce cas la la solution que t'a proposé notre ami est bonne. LA "REFLECTION".
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    object objetInconnu= MethodeQuiRenvoiObjet();
    Type t=objetInconnu.GetType();
    PropertyInfo pi= t.GetProperty("NomDeLaPropoAChanger");
    LeVraiTypeDeLaProp LeChamp= pi.GetValue(objetInconnu, null);
    la c'est un exemple pour récupérer la propriété d'un object avec la reflection.

    Ensuite t'as qu'à changer la valeur et la persister dans la BD. Pour cela tu as le choix entre un DAL (Data Access Layer) spécifique (que tu vas créer) ou l'utilisation d'ORM, ...

    Enfin tout cela pour dire que ta question n'est pas claire.

    Plus de détails s'il te plait.

    cordialement,

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut
    En fait je n'ai pas vraiment d'exemple de code puisque c'est exactement ce que je cherche

    En gros, j'ai ma BD ainsi constituée:

    TEleve
    --------------
    Nom, Prenom, Groupe...

    et ma classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Eleve
    {
        public string Nom { get; set; }
        public string Prenom { get; set; }
        public int Groupe { get; set; }
    ...
    }
    je voudrais avoir l'équivalent d'une fonction pouvant s'invoquer a peu près comme suit:
    ModifierEleve(Eleve, champ, valeur)
    soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModifierEleve(EleveCourrant, "Groupe", 2);
    "Eleve" contiendrais l'objet a modifié, la variable "champ" provenant de la BD qui contiendrais, par exemple, la string "Groupe", et la valeur, dans l'exemple du dessus 2.

    Et ceci aurai comme impact de modifier mon EleveCourrant.Groupe de 2.

    Ma problématique, c'est d'atteindre mon EleveCourrant.Groupe !

    J'espère avoir été plus clair... je continue a lire sur la réflexion en attendant si jamais ça se trouve être la solution :p

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut
    j'ai chercher pas mal dans la Reflection et dans toute sortes d'autre choses, mais malgré tout ça je n'arrive toujours pas
    Et je commence a m'écarter loin dans les pages de google :p

    Ca me parait pourtant invraisemblable que je sois le seul fou a avoir pensé a faire un truc comme ça, c'est rien d'ultra spécifique pourtant

  7. #7
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Tu peux aussi faire de la génération dynamique de code ("Codedom") et l'appeler avec un invoke (ou utiliser l'héritage en surchargeant une fonction virtual d'une classe existante).

    Autre solution : convertir la chaine en instruction SQL et "Executequery()"

  8. #8
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 19
    Par défaut
    C'est quoi le type de ta base (SQL,Oracle,Acess...)?
    Et avec quel mode tu travaille : Connecté/Déconnecté?
    Quel est le type de connexion?

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut
    D'abord excusez-moi pas mal chargée la semaine, je finis par répondre a mon propre posts et au propositions :p

    Citation Envoyé par Graffito Voir le message
    Tu peux aussi faire de la génération dynamique de code ("Codedom") et l'appeler avec un invoke (ou utiliser l'héritage en surchargeant une fonction virtual d'une classe existante).

    Autre solution : convertir la chaine en instruction SQL et "Executequery()"
    Es-ce que tu peux détaillé un peu plus tes solutions du haut stp?

    Autrement, le but est justement de ne PAS modifié la table, et donc de ne pas interagir avec la BD... la BD au bout du compte ne pourrait ne pas exister dans l'énoncer ça ferait pareil. Le but c'est vraiment de sortir le tout à partir d'une chaîne, donc le type de ma BD n'y change rien et un execute query ou toute équivalence n'est pas ce que je recherche

    Je continue mes recherches, si j'arrive a quelque chose d'efficace je partagerais en tout cas

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Ce que tu veux c'est juste en appelant une fonction par exemple modifiereleve tu puisses modifier un élève. Si c'est ça ta fonction ressemblera à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FonctionUpdate(table ,champs, valeur, condition)
    string requete("Update"+table+"Set"+champs+"="+valeur+"Where"+condition);
    Tu n'as plus cas utiliser cette fonction de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModifierEleve("Eleve", "[groupe]", "7", "[groupe] = 5")

  11. #11
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Tien, essaie ça :

    un objet

    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
     
    public class US1 
      {
        public string S { get; set; }
        public int I { get; set; }
     
        public US1(string s)
        {
          S = s;
        }
     
        public void ModifieChamp(string name, object value)
        {
          PropertyInfo pi = this.GetType().GetProperty(name);
          pi.SetValue(this, value, null);
        }
      }
    une utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    US1 us = new US1("coucou");
     
          MessageBox.Show(us.S);
          us.ModifieChamp("S", "Hello");
          MessageBox.Show(us.S);

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut
    Excellent! C'est exactement le genre de truc que je cherchais!!!

    Mais je repousse la chose encore un brin!
    Y'a t-il moyen de rendre ce truc récursif? Je veux dire, avoir accès au deuxième voir troisième niveau d'une classe à partir de la première ? (x.y.z)

    j'ai essayer avec ça;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public void ModChar(string name, string name2, object value)
        {
            PropertyInfo pi = this.GetType().GetProperty(name);
            pi = pi.GetType().GetProperty(name2);
            pi.SetValue(this, value, null);
        }
    mais le problème semble venir de la dernière ligne, qui ne reconnais donc plus le "this.y" car en fait je veux "this.x.y"!

    Et encore avec ma solution je serai coincé a avoir une surcharge pour chaque "niveau"

    en tout cas un gros merci, surtout ppphil mais tout les autres aussi! c'est quand même déjà un bon pas de fait et pour moi une très bonne direction dans laquelle continuer mes recherches

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/03/2006, 17h30
  2. passer une String en paramètre
    Par fabhxc dans le forum Langage
    Réponses: 11
    Dernier message: 28/12/2005, 15h46
  3. Passer la valeur dune variable javascript à une variable xsl
    Par nramariavelo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/12/2005, 17h27
  4. Réponses: 1
    Dernier message: 15/04/2005, 11h30
  5. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42

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