Partage
  • Partager sur Facebook
  • Partager sur Twitter

Singleton aide

    16 octobre 2011 à 12:01:30

    Bonjour,
    J'ai actuellement une classe dans laquelle je me connecte à ma base de donné SQL Server, ce que je veux faire c'est de remplacer cette classe par un singleton .
    Mais je ne sais comment faire.
    Je vous mets ci-dessous le code de ma classe de connexion que j'utilise actuellement.

    class conn
        {
            string connectionString = "Data Source=Paul-PC\\Paul;Initial Catalog=Paul;Integrated Security=true;Pooling=False";
            public SqlConnection connecter()
            {
              
                SqlConnection sqlConnection = new SqlConnection(connectionString);
                sqlConnection.Open();
    
                return sqlConnection;
            }
    
            public void Fermer()
            {
               SqlConnection sqlConnection = new SqlConnection(connectionString);
               sqlConnection.Close();
            }
    
        }
    


    Merci pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 octobre 2011 à 12:47:54

      Ce que tu cherches n'est pas un singleton mais une classe statique.
      Voici un exemple (qui respecte les conventions de nommage .NET)
      public static class ConnectionHelper // plus explicite que "conn"
      {
          private static readonly string ConnectionString = "Data Source=Paul-PC\\Paul;Initial Catalog=Paul;Integrated Security=true;Pooling=False";
          
          public static SqlConnection Connect()
          {
              var connection = new SqlConnection( ConnectionString );
              connection.Open();
              
              return connection;
          }
      
          public static void Close()
          {
              // je doute que ceci soit une bonne idée
              // il faut probablement stocker la SqlConnection créée quelque part
              var connection = new SqlConnection( ConnectionString );
              connection.Close();
          }
      }
      


      Les classes statique s'utilisent sans déclarer d'instance, comme ceci :
      ConnectionHelper.Connect();
      
      • Partager sur Facebook
      • Partager sur Twitter
        16 octobre 2011 à 13:18:30

        Merci pour ta réponse mais n'est il pas possible de créer un singleton ??
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          16 octobre 2011 à 14:00:25

          Et aussi di moi pourquoi tu trouves que le code qui suit n'est pas une bonne idée? Donne moi la bonne idée.
          et comment faire pour stocker la SqlConnection créée quelque part
          Merci encore pour ton aide


          public static void Close()
              {
                  // je doute que ceci soit une bonne idée
                  // il faut probablement stocker la SqlConnection créée quelque part
                  var connection = new SqlConnection( ConnectionString );
                  connection.Close();
              }
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            16 octobre 2011 à 14:05:30

            Tu crées une connexion, puis pour la fermer tu en crées une nouvelle et tu fermes cette dernière.
            Je sais pas comment la classe SqlConnection marche donc je suppose que ton code fonctionne, mais logiquement ceci est mieux :
            public static class ConnectionHelper 
            {
                private static readonly string ConnectionString = "Data Source=Paul-PC\\Paul;Initial Catalog=Paul;Integrated Security=true;Pooling=False";
            
                public SqlConnection Connection { get; set; }
                
                public static void Connect()
                {
                    Connection = new SqlConnection( ConnectionString );
                    Connection.Open();
                }
            
                public static void Close()
                {
                    Connection.Close();
                }
            }
            


            Mais même là, ce code est étrange ; cette classe ne sert à rien à part stocker le string de connexion.
            Pourquoi ne pas manipuler une SqlConnection directement ?
            • Partager sur Facebook
            • Partager sur Twitter
              16 octobre 2011 à 14:09:17

              Je sais que je demande beaucoup mais donne moi le code qui serait le plus efficace. Merci encore
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                16 octobre 2011 à 14:49:24

                Montre-moi ton code dans lequel tu utilises cette classe.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 octobre 2011 à 15:08:32

                  voici le code qui me permet d'afficher une table de ma base de donnée dans un datagridview
                  try
                              {
                                  dataGridView3.Rows.Clear();  // on vide toutes les lignes du DataGridView
                                 
                                  SqlCommand classCommand;
                                  SqlDataReader classReader = null;
                                  SqlConnection sql = conn.Connect(); 
                                  classCommand = new SqlCommand("SELECT * FROM CLASSE", sql);          
                                  classReader = classCommand.ExecuteReader();
                  
                                  while (classReader.Read())
                                  {
                                      dataGridView3.Rows.Add(classReader.GetInt32(0), classReader.GetString(1));
                                  }
                              }
                              finally
                              {
                                  conn.Close();
                              }
                  
                              this.dataGridView3.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine;
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    16 octobre 2011 à 15:22:42

                    Déclare un string en const dans ta classe, qui contient le string de connexion, puis remplace
                    SqlConnection sql = conn.Connect();
                    

                    et
                    conn.Close();
                    

                    par le contenu de ces méthodes, puisque ça tient en une ligne.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 octobre 2011 à 15:35:01

                      Montre à quoi devrait ressemblé ma classe pour qu'elle soit un singleton
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        16 octobre 2011 à 15:52:14

                        Si ça t'amuse, mais ça n'a absolument aucun intérêt dans ton cas.
                        Le singleton "de base" :
                        public class ConnectionHelper
                        {
                            private static ConnectionHelper _instance;
                            public static ConnectionHelper Instance
                            {
                                get
                                {
                                    if( _instance == null )
                                    {
                                        _instance = new ConnectionHelper();
                                    }
                                    return _instance;
                                }
                            }
                        
                            private ConnectionHelper() // note le "private"
                            {
                                // ...
                            }
                            
                            // ...
                        }
                        


                        Le principe est simple : le constructeur est privé, le seul moyen d'obtenir l'instance est via une propriété.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 octobre 2011 à 16:02:47

                          Dis moi dans quel cas faudra t il que j'utilise des singletons?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Singleton aide

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown