none
Connexion Bdd RRS feed

  • Question

  • Bonjour,

     

    Je cherche la meilleur facon de me connecter à ma base de donnée pour un site internet. Au debut j'avais fait un singleton, qui etait une mauvaise chose.

     

    Vla mon code : pouvez-vous me dire ce que vous en pênsez ?

     

    Factory Class :

     

    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;
            }
     
        }

    ClientDAO class :

     

    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;
            }
        }

     

     

    Je me demande s'il ne serait pas utile de mettre mes methodes en static.

     

    J'attends vos remarques.

     

    Merci

    vendredi 26 septembre 2008 16:42

Réponses

  • Bonjour,

     

    C'est pas mal...

    A part que je vous conseillerais de virer les try/catch (ne sert à rien dans ce code).

     

    Cependant, si vous souhaitez utilisez au maximum la généricité de l'accès au données, essayez d'utiliser toutes les classes DbXXXXXXXXXXX au lieu de SqlXXXXXXXXXXXX spécifique à SQL Server.

     

    Si vous êtes en train de développer une nouvelle application, essayez de passer à Linq To SQL ou Linq To Entities...

     

    Cordialement

     

    lundi 29 septembre 2008 19:54
    Modérateur
  • Bonjour,

     

    Le problème c'est que dans la classe ClientADO figure énormément de "new SqlXXXXXXX."

    Depuis la version 2.0 du .NET Framework, il est possible d'utiliser des fabriques qui permettent de créer automatiquement des DbCommand, DbConnection...

     

    La seule ligne de code spécifique à SQL Server :

    DbProviderFactory fabrique = SqlClientFactory.Instance;

     

    Après pour créer les DbCommand, DbConnection :

    DbCommand dc = fabrique.CreateCommand();

    ...etc

     

    L'avantage, c'est que vous rendez votre code beaucoup moins dépendant d'un SGBD particulier...

    Le revers de la médaille est que vous ne pourrez pas utiliser les fonctionnalités spécifiques à SQL Server.

     

    Est-ce que cela répond à votre question ?

     

    Cordialement

     

    mardi 30 septembre 2008 13:46
    Modérateur

Toutes les réponses

  • Bonjour,

     

    C'est pas mal...

    A part que je vous conseillerais de virer les try/catch (ne sert à rien dans ce code).

     

    Cependant, si vous souhaitez utilisez au maximum la généricité de l'accès au données, essayez d'utiliser toutes les classes DbXXXXXXXXXXX au lieu de SqlXXXXXXXXXXXX spécifique à SQL Server.

     

    Si vous êtes en train de développer une nouvelle application, essayez de passer à Linq To SQL ou Linq To Entities...

     

    Cordialement

     

    lundi 29 septembre 2008 19:54
    Modérateur
  • Merci pour vos commentaires.

     

    Dans la classe j'utilise bien DBXXXXXXXXX, mais à l'utilisation, comme je suis sous sqlserver, je cast avec les sqlXXXXXXXX.

     

    Auriez vous un exemple ?

     

    Merci

    mardi 30 septembre 2008 08:07
  • Bonjour,

     

    Le problème c'est que dans la classe ClientADO figure énormément de "new SqlXXXXXXX."

    Depuis la version 2.0 du .NET Framework, il est possible d'utiliser des fabriques qui permettent de créer automatiquement des DbCommand, DbConnection...

     

    La seule ligne de code spécifique à SQL Server :

    DbProviderFactory fabrique = SqlClientFactory.Instance;

     

    Après pour créer les DbCommand, DbConnection :

    DbCommand dc = fabrique.CreateCommand();

    ...etc

     

    L'avantage, c'est que vous rendez votre code beaucoup moins dépendant d'un SGBD particulier...

    Le revers de la médaille est que vous ne pourrez pas utiliser les fonctionnalités spécifiques à SQL Server.

     

    Est-ce que cela répond à votre question ?

     

    Cordialement

     

    mardi 30 septembre 2008 13:46
    Modérateur
  • oui merci

    jeudi 9 octobre 2008 13:30