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 :

Connection Bdd


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Connection Bdd
    Bonjour,

    Je cherche la meilleur solution pour ma connexion à ma Bdd.
    Que pensez vous de mon code ? est bien ?

    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
     
    public class SqlDbConnection
        {
            private SqlConnection oSqlConnection = null;
            private static object _instanceLocker = new object();
     
            private static SqlDbConnection _instanceSqlDbConnection;
            public static SqlDbConnection InstanceSqlDbConnection
            {
                get
                {
                    lock (_instanceLocker)
                    {
                        if (_instanceSqlDbConnection == null)
                        {
                            _instanceSqlDbConnection = new SqlDbConnection();
                        }
                        return _instanceSqlDbConnection;
                    }
                }
            }
     
            //Creation connexion et la renvoi
            public SqlConnection GetSqlConnection()
            {
                oSqlConnection = new SqlConnection("Data Source=localhost;Initial Catalog=maBdd;Integrated Security=True");
                //oSqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString());
     
                if (oSqlConnection.State == System.Data.ConnectionState.Closed)
                    oSqlConnection.Open();
     
                return oSqlConnection;
            }
     
            public void CloseSqlConnection()
            {
                if (oSqlConnection != null)
                {
                    if (oSqlConnection.State == System.Data.ConnectionState.Open)
                        oSqlConnection.Close();
                }
            }
        }
    Appel de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SqlConnection cnx = SqlDbConnection.InstanceSqlDbConnection.GetSqlConnection();

    En faite je fais le meme systeme pour toutes classes de ma DAL, BLL...

    Des reactions ?

    Merci

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    euh...

    j'ai un doute affreux, mais tu veux une seule connexion pour toute ton appli et tous tes utilisateurs ?

    passque a vue de nez, c'est ce que tu fais, non ?

    Et ca, ca ne me semble pas etre une bonne idee a moyen terme...quid de l;utilisateur2 qui doit faire une rerquete pendant que l'utilisateur1 en fait deja une ????


    Pour une appli asp.net, essaye plutot de pooler tes connections

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    autais tu un exemple pour moi que je puisse me servir ?

  4. #4
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Je cherche une class, que je puisse integrer a mes projets.

    merci

  5. #5
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    l'idee de depart est pas top mal (en dehors du singleton)

    A la limite, fait plutot qq chose comme ce qui est decrit ici :
    http://johannblais.developpez.com/tu...-donnees/#LIII

    (je vais finir par le mettre en signature )

    Sinon, si tu veux des trucs plus "packages", regarde du cote des entreprise libraries, ou de Subsonic (j'aiiiime subsonic... )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    j'ai retravaillé mon code. Pouvez-vous me dire si c'est bon :


    Connection à la Bdd
    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
     
    public class BddConnection
        {
            private SqlConnection oSqlConnection = null;
     
            public SqlConnection GetSqlConnection()
            {
                try
                {
                    ConnectionStringSettings s = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["BddConnectionString"];
                    oSqlConnection = new SqlConnection(s.ConnectionString.ToString());
     
                    if (oSqlConnection.State == System.Data.ConnectionState.Closed)
                        oSqlConnection.Open();
     
                }
                catch (Exception)
                {
     
                }
                return oSqlConnection;
            }
        }
    Utilisation : ClientDAO

    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
     
     public abstract class ClientDAO
        {
            private static SqlConnection _myConnect;
            public static SqlConnection GetConnection()
            {
                if (_myConnect == null)
                {
                    BddConnection mySocle = new BddConnection();
                    _myConnect = (SqlConnection)mySocle.GetSqlConnection();
                }
     
                return _myConnect;
            }
     
            public static bool PseudoExist(string pseudo)
            {
                bool exist = false;
                try
                {
                    SqlCommand oSqlCommand = new SqlCommand("ps_PseudoExist", GetConnection());
                    oSqlCommand.CommandType = CommandType.StoredProcedure;
                    oSqlCommand.Parameters.Add("u_pseudo", SqlDbType.VarChar, 30).Value = pseudo;
     
                    int rowCount = Convert.ToInt32(oSqlCommand.ExecuteScalar());
                    if (rowCount > 0)
                        exist = true;
                }
                catch (Exception)
                {
     
                    throw;
                }
     
                return exist;
            }
        }
    Merci à vous

  8. #8
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Bonsoir,

    Après le lien que t'as filé pvialatte, je sais ce que tu fais encore avec tout ces SqlObjects au lieu de profiter des conseils données dans ce bon tuto

  9. #9
    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
    Par défaut
    Tu as changé la manière dont c'est écrit mais au final, le fonctionnement est le même, tu n'as toujours qu'une seule connexion pour tout le monde. Tes modifications n'ont servi à rien.

    Et banit les try/catch avec un catch vide, c'est la pire gestion d'erreur possible. Dans ce cas, tu ferais même mieux de ne pas mettre de try/catch plutôt qu'un qui masque toutes les erreurs.
    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

  10. #10
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Merci de votre patience, j'essaye encore :


    Ma factory
    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 class BddConnection
        {
            public DbConnection GetConnection()
            {
                DbConnection conn = null;
                DbProviderFactory myFactory;
                    try
                    {
                        ConnectionStringSettings s = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["BddConnectionString"];
                        myFactory = DbProviderFactories.GetFactory(s.ProviderName);
                        conn = myFactory.CreateConnection();
                        conn.ConnectionString = s.ConnectionString;
     
                    }
                    catch (Exception) {
                        throw;
                    }
     
                return conn;
            }
        }
    Utilisation

    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
     
     public abstract class ClientDAO
        {
            private static SqlConnection _myConnect;
            public static SqlConnection GetConnection()
            {
                if (_myConnect == null)
                {
                    BddConnection mySocle = new BddConnection();
                    _myConnect = (SqlConnection)mySocle.GetConnection();
                }
     
                return _myConnect;
            }
     
            public static bool PseudoExist(string pseudo)
            {
                bool exist = false;
                try
                {
                    SqlCommand oSqlCommand = new SqlCommand("ps_PseudoExist", GetConnection());
                    oSqlCommand.CommandType = CommandType.StoredProcedure;
                    oSqlCommand.Parameters.Add("u_pseudo", SqlDbType.VarChar, 30).Value = pseudo;
                    GetConnection().Open();
     
                    int rowCount = Convert.ToInt32(oSqlCommand.ExecuteScalar());
                    GetConnection().Close();
                    if (rowCount > 0)
                        exist = true;
                }
                catch (Exception)
                {
     
                    throw;
                }
     
                return exist;
            }
        }
    Ne pas s'attarder sur le try catch, ce n'est pas encore implementé, ce qui m'interesse c la connection a la BDD.

    Bon c'est mieux la ?

  11. #11
    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
    J'ai jamais compris pourquoi tout le monde se prenait la tête avec ses histoires de connexion et tout.
    Perso, je crée, ouvre puis ferme ma connexion à chaque requête et je laisse le framework, le driver et la base gérer comme ils le sentent le pool de connexion

  12. #12
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Pas d'autres commentaires ? j'attends vos critiques

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    J'ai jamais compris pourquoi tout le monde se prenait la tête avec ses histoires de connexion et tout.
    Perso, je crée, ouvre puis ferme ma connexion à chaque requête et je laisse le framework, le driver et la base gérer comme ils le sentent le pool de connexion
    Idem, cela ne sert a rien de faire un singleton de ce type.

    De plus quand tu utilises un membre static dans une application asp.net, il est accessible/partagé entre tous les threads, ce qui veut dire que tu es obligé de faire des lock pour être "thread safe" ...
    je te conseille plutot de lire de type d'article
    http://aspalliance.com/1099_Understa...ing_in_NET.all

  14. #14
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Donc si j'ai bien tout compris, j'eneleve mon singleton les methodes statics.

    Factory

    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
     
     public class BddConnection
        {
            public DbConnection GetConnection()
            {
                DbConnection conn = null;
                DbProviderFactory myFactory;
                    try
                    {
                        ConnectionStringSettings s = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["BddConnectionString"];
                        myFactory = DbProviderFactories.GetFactory(s.ProviderName);
                        conn = myFactory.CreateConnection();
                        conn.ConnectionString = s.ConnectionString;
     
                    }
                    catch (Exception) {
                        throw;
                    }
     
                return conn;
            }
     
        }

    Utilisation

    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
     
     public class ClientDAO
        {
            public SqlConnection GetConnection()
            {
                SqlConnection _myConnect;
                BddConnection mySocle = new BddConnection();
                _myConnect = (SqlConnection)mySocle.GetConnection();
     
                return _myConnect;
            }
     
            public bool PseudoExist(string pseudo)
            {
                bool exist = false;
                try
                {
                    SqlConnection _myConnect = GetConnection();
                    SqlCommand oSqlCommand = new SqlCommand("ps_PseudoExist", _myConnect);
                    oSqlCommand.CommandType = CommandType.StoredProcedure;
                    oSqlCommand.Parameters.Add("u_pseudo", SqlDbType.VarChar, 30).Value = pseudo;
                    _myConnect.Open();
     
                    int rowCount = Convert.ToInt32(oSqlCommand.ExecuteScalar());
                    _myConnect.Close();
                    if (rowCount > 0)
                        exist = true;
                }
                catch (Exception)
                {
     
                    throw;
                }
     
                return exist;
            }
        }

    Pouvez-vous me dire votre avis ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    actuellement le try ne sert a rien, tu poses un try si 1/ tu es capables de faire un traitement différent en cas d'exception 2/ tu as des resources a fermer ...
    dans ton cas si il y a une exception sur la ligne ExecuteScalar la connection n'est pas fermée ...

    il faut plutot placer un finally

    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
     public bool PseudoExist(string pseudo)
            {
    		SqlConnection _myConnect = null;           
     
     
                try
                {
                    _myConnect = GetConnection();
                    SqlCommand oSqlCommand = new SqlCommand("ps_PseudoExist", _myConnect);
                    oSqlCommand.CommandType = CommandType.StoredProcedure;
                    oSqlCommand.Parameters.Add("u_pseudo", SqlDbType.VarChar, 30).Value = pseudo;
                    _myConnect.Open();
     
                    int rowCount = Convert.ToInt32(oSqlCommand.ExecuteScalar());
     
                    if (rowCount > 0) {
    			return true;
    		}
     
                }
                finally 
                {
    		if ( _myConnect  != null ) {
                   		_myConnect.Close();
    		}
                }
     
                return false;
            }
        }

  16. #16
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Merci Xpander,

    Comme je le disais plus haut, il ne faut pas s'attarder sur mon try catch mais plutot la facon de se connecter a la BDD et a son utilisation.

    Est elle satisfaisante pour un site Web ?

  17. #17
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Personne ?

    Dans cette article il y a des methode static ? est ce une bonne chose ?

    http://johannblais.developpez.com/tu...-donnees/#LIII

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Oui ta méthode est bonne pour un site web ... du moins si tu utilises celle avec finally

  19. #19
    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 topolino Voir le message
    Dans cette article il y a des methode static ? est ce une bonne chose ?
    Oui

  20. #20
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Est il plus judicieux de mettre mes methodes en static ? et ds ma factory et dans ma DAL Client ?

Discussions similaires

  1. Connection BDD MySQL => exception
    Par sam.fet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/03/2007, 15h01
  2. [VB5]Pb connection Bdd
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 12/06/2006, 07h43
  3. [VB] connection BDD mysql
    Par oceane751 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/02/2006, 23h10
  4. connection bdd
    Par nath-0-0 dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/11/2005, 16h55
  5. prob connection bdd access chez hebergeur
    Par zorba49 dans le forum ASP
    Réponses: 2
    Dernier message: 14/09/2005, 19h23

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