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 :

probleme d'ouverture de connexion


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Par défaut probleme d'ouverture de connexion
    Bonjour tout le monde,

    Je suis en train de me poser une question de "bonne pratique" concernant la connexion à une base de données :

    ayant réalisé un petit site web utilisant une db ACCESS ("bouuuuuh", me diront certains ;-) ), je suis confronté à un problème : après un certain temps, une erreur m'indique "impossible d'ouvrir plus de tables". En fait, mon site fonctionne de la manière suivante : lors de l'ouverture d'une nouvelle session, j'ouvre un objet DbConnexion que j'utilise tout au long de ma session. J'avais opté pour cette formule pour des raisons de performance, afin de ne pas ouvrir à chaque requete une nouvelle connexion.

    maintenant je me pose la question s'il ne serait pas plus judicieux justement d'ouvrir à chaque requete une nouvelle connexion afin de ne plus être confronté à ce problème de "saturation" de l'objet connexion.

    Qu'en pensez-vous ? comment procédez-vous ?
    Merci de vos précieux conseils.

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Citation Envoyé par nico_4802 Voir le message

    j'ouvre un objet DbConnexion que j'utilise tout au long de ma session. J'avais opté pour cette formule pour des raisons de performance, afin de ne pas ouvrir à chaque requete une nouvelle connexion.
    As-tu réellement remarqué que les performances se dégradaient en ouvrant des connexions ??

    Il est clair que si tu ouvres une connexion par session, tu vas vite atteindre la limite de connexion ouverte. A ta place, j'ouvrirai et fermerait une connexion que lorsque cela est nécessaire.

  3. #3
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    D'accord avec Paul.

    En plus, je ne pense pas que MS Access puisse permettre de tuner le nombre maximal de connexions simultanées, comme c'est le cas sur les autres SGBD.

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Pourquoi ne pas avoir utilisé MySQL ?
    C'est facile à installer, à utiliser, super puissant (procédures stockées, vues, triggers).... et c'est gratuit !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Par défaut
    En jetant un oeil dans le "starter kit de site web personnel" de visual studio, qui devrait logiquement etre un modèle en termes de programmation , voici ce qu'ils font :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void MaFonction(string Param)
    {
      using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ConnectionString))
      {
          using (SqlCommand command = new SqlCommand("Procedure", connection))
          {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add(new SqlParameter("@Param", Param));
                connection.Open();
                command.ExecuteNonQuery();
          }
       }
    }
    Concernant la DB, (je sais qu'il allait y avoir des réfractaires ;-)) je compte passer sous sql server (car je suis sur un serveur de Reymond, que je ne gère pas moi-même) lorsque mon site sera opérationnel, donc no-soucis... mais je voulais avant tout m'assurer que ma facon de programmer sois bonne.

    je vais donc essayer de m'inspirer de ce code !
    Merci pour vos conseils !

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Best Practice: tu ouvres ta connection au + tard, tu la fermes au + tot.
    Donc tu ouvres/fermes à chaque requête

  7. #7
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Ce que je te conseille, afin de ne pas ouvrir plus de connection que ce dont tu as reelement besoin :

    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
     public class BasePage : System.Web.UI.Page
        {
         private IDbConnection  _MaConnection;
     
          public IDbConnection MaConnection
            {
                get
                {
                    return _MaConnection;
                }
            }
     
            protected override void OnInit(EventArgs e)
            {
              //On ouvre la conenction
              _MaConnection = //script pour ouvri ta connection
                base.OnInit(e);
            }
     
     
          protected override void OnUnload(EventArgs e)
            {
              //On ferme löa connection la connection
              _MaConnection.Dispose();
                base.OnInit(e);
            }
    Tu herites de cette page tes pages aspx au lieu d' heriter de System.Web.UI.Page, ansi tu as une propriete conenction qui fait reference a une connection ouverte qui se fermera tout seul, tu n'as plus a t'en occuper.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public partial class _Default : BasePage 
        {
     
     protected void Page_Load(object sender, EventArgs e)
            {
    // maconnection  fait reference a ce qui a ete defini plus haut...
    }
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Par défaut
    merci pour vos conseils,

    Très bonne idée que la BasePage ! maintenant, je crains que cela ne résolve pas tous les problèmes dans le sens où il y aura toujours en permanence une connexion ouverte par "surfeur". Ce qui est clair, c'est que les connexions étant nouvelles à chaque page, elles ne risquent plus de saturer aussi rapidement... Il faut juste s'assurer que la DB puisse ouvrir autant de connexions simultanément qu'il y aura de visiteurs sur mon site !

    la remarque de lutecefalco semble donc peut-être la plus "optimale" (mais celle qui nécessite le plus de changements )

    merci !!!

  9. #9
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par nico_4802 Voir le message
    merci pour vos conseils,

    Très bonne idée que la BasePage ! maintenant, je crains que cela ne résolve pas tous les problèmes dans le sens où il y aura toujours en permanence une connexion ouverte par "surfeur".
    Non, il y aura une connexion ouverte le temps de "création" de la page côté serveur. Dès que la page sera rendu en HTML, la connexion sera fermée

Discussions similaires

  1. Probleme d'ouverture d'une BD Access !!!
    Par realmadrid dans le forum Access
    Réponses: 7
    Dernier message: 07/10/2005, 15h19
  2. [visual c++]Probleme d'ouverture de solution
    Par dje41 dans le forum MFC
    Réponses: 2
    Dernier message: 12/04/2005, 11h41
  3. Ouverture de connexion et envoi d'un message par socket
    Par loleske dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/02/2005, 12h52
  4. Probleme d'ouverture de formulaire
    Par nemesys971 dans le forum IHM
    Réponses: 11
    Dernier message: 01/02/2005, 15h08
  5. [C#] [Oracle] Problème de chaine de connexion
    Par didoboy dans le forum ASP.NET
    Réponses: 9
    Dernier message: 08/01/2005, 11h32

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