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 :

[C#] Simuler une variable de session en C#


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut [C#] Simuler une variable de session en C#
    Bonjour,

    Supposons que j'ai une application C# qui comporte 3 winforms qui utilisent tous les 3 les mêmes données de ma base de données : des données banales comme une liste d'utilisateur. Plutôt que de faire un appel vers ma base de données à chaque fois que je charge une de mes pages.

    Ne serait-il pas possible de simuler une sorte de SESSION comme pour ASP.NET ?

    J'aimerai par exemple charger la liste dans un objet "MyUserList" et dans n'importe laquelle de mes pages, pouvoir faire MyUserList.Get(), MyUserList.Filter(), etc... sans pour autant avoir à chaque fois à lancer une requête.

    Que proposez vous comme solution ?

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Pourquoi ne pas mettre tout ça dans une classe statique ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    J'y ai pensé mais comment faire ?

    Ma classe me charge les données, je les stocks en variable privée dans mon winform. Mais quand je passe sur mon 2è winform, je dois recharger les données dans la base de données ?

    C'est actuellement la solution que j'ai choisis, à défaut d'avoir mieux

  4. #4
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    tu devrais faire une application client/serveur.

    Bye

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Je suppose que tu veux dire "application web", si c'est bien ça, c'est volontairement que je n'ai pas pris ASP.NET.

    J'ai un module C# et un autre ASP.NET

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu crées une classe statique qui rend tes données disponibles pour tout le programme, par exemple :

    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
     
    public static class CommonData
    {
        private static List<User> users = null;
     
        public static List<User> Users
        {
            get
            {
                // On charge la liste lors du premier appel
                if (users == null) LoadUsers();
                return users;
            }
        }
     
        private static LoadUsers()
        {
            // ici chargement des données et initialisation de users
        }
    }
    Ensuite pour récupérer les données il suffit d'utiliser CommonData.Users

  7. #7
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Ah, j'avais cru lire 3 applications Windows mais effectivement si tu n'as qu'une seule application et 3 Forms, je suis d'accord avec la solution de Tomlev et de SaumonAgile qui n'est pas modérateur pour rien.
    Bye

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Je confirme la solution de Tomlev.

    Citation Envoyé par Pilloutou
    SaumonAgile qui n'est pas modérateur pour rien.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Dans la réponse de tomlev:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static List<User> users = null;
    Mince, j'ai toujours pensé qu'on ne pouvait pas faire ça dans une classe statique... Je ne sais pas, il me semblait avoir déjà essayé ça, mais j'ai dû louper un truc.

    J'essaye ça demain soir et je vous tiens au courant

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Bon j'ai testé de suite finalement, j'étais impatient de savoir si ça allait marcher

    Bon alors ça marche, bizarre, je sais pas pourquoi je suis toujours partis du principe que mes variable statique dans une classe statique ne conservait pas leur valeur...

    Maintenant faut que je regarde dans mon code au boulot si je fais pas la même erreur : réinventer la roue.... Vu qu'au boulot je bosse en ASP.NET, j'ai les variables de session, je ne sais pas si j'ai pas bidouiller avec ça...


    Merci à tous, je m'endormirai en ayant apprit quelque chose ce soir

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Attention quand même, dans le contexte ASP.NET, tu as plutôt intérêt à utiliser des variables de session ou de serveur, parce que rien ne garantit que tes classes statiques seront conservées en mémoire : il me semble que si l'appli ASP.NET n'est pas utilisée pendant un certain temps, elle est déchargée de la mémoire... mais il faudrait un expert ASP.NET pour confirmer, moi je connais pas très bien.
    D'un autre côté, vu que le chargement des données est fait lors du premier appel, c'est transparent pour ton appli, donc tu t'en fous un peu...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Oui non effectivement, j'ai parlé trop rapidement hier.
    En ASP, si je ne stock pas en session, lors de mon prochain appel au server, les données doivent être stockées quelque part pour pouvoir être retrouver.

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 02/02/2006, 23h30
  2. Réponses: 4
    Dernier message: 14/12/2005, 08h33
  3. [C#] ArrayList dans une variable de session ?
    Par Oberown dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/12/2005, 15h50
  4. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28

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