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 :

[Entreprise Library] Ouverture/Fermeture de connection


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut [Entreprise Library] Ouverture/Fermeture de connection
    Bonjour à tous !

    Pour mon application C#, je sus en train de tester l'outil Microsoft Entreprise Library.

    Je trouve que c'est chaint à configurer mais, une fois cette étape passée (grâce aux nombreux tutos que j'ai trouvé ici et là ! ^^), c'est vraiment bien à utiliser !

    Je me pose une question. Dans ce très bon article, on voit comme 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
    21
    22
    public ArrayList AllInformations()
    {
        ArrayList list = new ArrayList();
     
        Database db = DatabaseFactory.CreateDatabase("Oracle");
     
        string sqlQuery = "SELECT * FROM portail_infos";
        DbCommand command = db.GetSqlStringCommand(sqlQuery);
     
        IDataReader reader = db.ExecuteReader(command);
     
        while(reader.Read())
        {
            Information inf = new Information(reader.GetInt32(0), 
                                              reader.GetString(1), 
                                              reader.GetString(2),
                                              reader.GetDateTime(3), 
                                              reader.GetBoolean(4));
            list.Add(inf);
        }
        return list;
    }
    Et effectivement, en testant, ça marche très bien !
    Mais, je me demandais comment est gérée l'accès à la base de données ?
    Est-ce que la connection s'ouvre avec le CreateDatabase() ? Si oui, elle se ferme où ? Ou alors, est-ce qu'elle s'ouvre au lancement de l'application ?

    Je ne sais pas si quelqu'un aura la réponse, mais dans tous les cas, merci !

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Bonjour,

    à mon avis elle s'ouvre dans le ExecuteReader et se ferme lorsque le reader est disposé.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    D'accord, merci pour cette réponse.
    J'ai une autre question :

    Si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Database db = DatabaseFactory.CreateDatabase("Oracle");
        string sqlQuery = "SELECT * FROM portail_infos";
        DbCommand command = db.GetSqlStringCommand(sqlQuery); 
        using (IDataReader reader = db.ExecuteReader(command))
        {
            // code à exécuter
        };
    au vue du code, le DbComand (qui possède une méthode Dispose) est-il libéré avec le DataReader ?

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    au vue du code, le DbComand (qui possède une méthode Dispose) est-il libéré avec le DataReader ?
    Je pense que oui mais pour t'en assurer réitere ton ExecuteReader

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    using (IDataReader reader = db.ExecuteReader(command))
        {
            // code à exécuter
        };
     
    // si le command est clos ca marchera pas
    using (IDataReader reader = db.ExecuteReader(command))
        {
            // code à exécuter
        };

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    Pas bête !
    J'ai testé et je n'ai aucune erreur...
    Donc, mon DbCommand n'est pas libéré...

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    En fait je suis bête parce que c'est la même chose en ADO.NET classique

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut


    J'ai aussi essayé en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using (IDataReader reader = db.ExecuteReader(command))
        {
            // code à exécuter
        };
     
    command.Dispose(); 
     
    // si le command est clos ca marchera pas
    using (IDataReader reader = db.ExecuteReader(command))
        {
            // code à exécuter
        };
    Et ça marche...

  8. #8
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Il me semble que le Dispose peut prendre un peu de temps avant d'être pris en compte par le Garbage Collector.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    command.Dispose(); 
     
    // on force le garbage collector as nettoyer maintenant
    // c'est moche mais c'est pour le test
    GC.Collect();
    GC.WaitForPendingFinalizers();

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    Ben, j'ai testé, ... et ça marche toujours ! J'ai encore accès à mon DbCommand... C'est à ni rien comprendre !!!

  10. #10
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Il est possible que le Dispose de la DbCommand ne soit pas implémenté pour SqlServer.
    En l'occurence puisque la méthode peut être utilisée dans d'autre bases de données, je serais d'avis d'appliquer le principe de précaution : Dispose de chaque DbCommand utilisée pour chaque DataReader.
    De toute façon, on n'utilise pas la même sqlQuery 36 fois non plus

    Désolé de ne pouvoir faire plus. Le coup du Dispose m'a coupé un bras la

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    je relance le sujet pour savoir si quelqu'un aurait des informations sur la gestion de l'ouverture et fermeture de connexion avec DAAB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                IDataReader reader = null;
                DbCommand commandWrapper = Db.GetStoredProcCommand(PS_CLIENT_CHARGER);
                reader = Db.ExecuteReader(commandWrapper);
     
     
                Client ret = TranformeEnEntite(reader);
                reader.Close();
                return ret;
    J'ai actuellement le code ci-après.
    Lorsque je vais dans le moniteur d'activité de Sql Serveur, ma connexion reste ouverte (en sleeping, mais ouverte quand même).

    Donc je m'interroge. Est-ce normal ? Serait-ce une forme d'optimisation ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2006, 12h28
  2. [XSL] ouverture fermeture de balise
    Par sebus dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/03/2006, 13h00
  3. ouverture/fermeture d'une fenêtre modale showModelessDialog
    Par marti dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2006, 05h03
  4. [C#] La bonne utilisation des WinForms (ouverture-Fermeture)
    Par Harry dans le forum Windows Forms
    Réponses: 28
    Dernier message: 03/08/2005, 11h39
  5. Plusieurs SELECT dans l'ouverture d'une connection
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 01/04/2005, 11h09

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