Debut de package pour accès base de données [Résolu]

Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
- - Dernière réponse : Seth77
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
- 13 nov. 2006 à 09:37
Salut

voila je commence a faire un package pour l'accés à la base de données ...qu'en pensez vous ?
c juste un debut
je pense ensuite faire les ajout par SQL...

--------------------------------------------------------------------------------------------------------------------------------------
namespace Create_BD
{
    class DB_Type
    {
        static public String getBool() { return "BIT"; }
        static public String getShort() { return "SHORT"; }
    }

    class DB_Champ
    {
        private String Nom;
        private String Type;
        private int Size = 0;

        private bool Not_Null = false;
        private bool Unique = false;
        private bool Primary_Key = false;

        public DB_Champ(String theNom, String theType)
        {
            this.Nom = theNom;
            this.Type = theType;
        }

        public DB_Champ(String theNom, String theType, int theSize) : this(theNom, theType)
        {
            this.Size = theSize;
        }

        public DB_Champ(String theNom, String theType, int theSize, bool theNotNull)
            : this(theNom, theType, theSize)
        {
            this.Not_Null = theNotNull;
        }

        public DB_Champ(String theNom, String theType, int theSize, bool theNotNull,
            bool theUnique) : this(theNom, theType, theSize, theNotNull)
        {
            this.Unique = theUnique;
        }

        public DB_Champ(String theNom, String theType, int theSize, bool theNotNull,
            bool theUnique, bool thePrimary_Key) : this(theNom, theType, theSize, theNotNull, theUnique)
        {
            this.Primary_Key = thePrimary_Key;
        }

        public void Clear()
        {
            this.Nom = "";
            this.Type = "";
            this.Size = 0;
            this.Not_Null = false;
            this.Unique = false;
            this.Primary_Key = false;
        }

        public void setNom(String theNom) {this.Nom = theNom;}
        public void setType(String theType) {this.Type = theType;}
        public void setSize(int theSize) {this.Size = theSize;}
        public void setNotNull(bool theNotNull) {this.Not_Null = theNotNull;}
        public void setUnique(bool theUnique) {this.Unique = theUnique;}
        public void setPrimaryKey(bool thePrimaryKey) {this.Primary_Key = thePrimaryKey;}

        public String getNom() { return this.Nom; }
        public String getType() { return this.Type; }
        public int getSize() { return this.Size; }
        public bool getNotNull() { return this.Not_Null; }
        public bool getUnique() { return this.Unique; }
        public bool getPrimaryKey() { return this.Primary_Key; }

        public void toConsole()
        {
            Console.WriteLine("  -> " + this.Nom + "  " + this.Type + "  " + this.Size +
                "  NotNull:" + this.Not_Null + " Unique:" + this.Unique +
                " PrimaryKey:" + this.Primary_Key);
        }
    }

    class DB_Table
    {
        private String Nom;
        private ArrayList ListeChamp;

        public DB_Table()
        {
            this.ListeChamp = new ArrayList();
        }

        public void setNom(String theNom) {this.Nom = theNom;}
        public String getNom() {return this.Nom;}

        public bool Add(DB_Champ theChamp)
        {
            for (int i = 0; i < this.ListeChamp.Count; i++)
            {
                if (((DB_Champ)this.ListeChamp[i]).getNom() == theChamp.getNom())
                    return false;
            }

            ListeChamp.Add(theChamp);
            return true;
        }

        public void toConsole()
        {
            Console.WriteLine("------------------------------------------------------------------");
            Console.WriteLine(this.Nom);
            for (int i = 0; i < this.ListeChamp.Count; i++)
            {
                ((DB_Champ)this.ListeChamp[i]).toConsole();
            }
            Console.WriteLine("------------------------------------------------------------------");
        }
    }

    class Create_DB
    {       
        private String DBPath;
        private ArrayList ListTable;
       
        public String getDBPath()
        {
            return this.DBPath;
        }

        public void setDBPath(String theDBPath)
        {
            this.DBPath = theDBPath;
           
        }

        public void AddTable(DB_Table theTable)
        {
            this.ListTable.Add(theTable);
        }

        public Create_DB() {
            this.DBPath = "";
            this.ListTable = new ArrayList();
        }
    }
}
--------------------------------------------------------------------------------------------------------------------------------------

Herve
Afficher la suite 

20/34 réponses

Meilleure réponse
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
43
3
Merci
Voui, suffit de précéder la méthode, class, ou autre par "///"
Liste complète http://perso.orange.fr/jm.doudoux/microsoft/doctechcsharp/doctechcsharp.htm

<hr size="2" />VC# forever

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Salut,

j'ai parcouru en diagonale, premiere remarque que j'ai a faire, c'est qu'en C# on utilises le camelCasing pour les champs et on utilise des propriétés, et non pas des accesseurs.

Par exemple, ton champ privé "Nom" devient "nom"
et tu remplaces

public void setNom(String theNom) {this.Nom = theNom;} et
public String getNom() { return this.Nom; }

par

public string Nom
{
   get { return this.nom; }
   set { this.nom = value;}
}

tu peux tout a fait omettre le set ou le get, ou leur rajouter du code

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
43
0
Merci
Et j'ajouterais qu'il y a déjà des tonnes de sources sur ce sujet sur le site.... De quoi t'en inspirer.

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Seconde remarque, si tu bosses en .Net 2, n'utilises pas un ArrayList, mais une List<DB_Champ>;
Autrement, plutot que d'avoir ca :

        public bool Add(DB_Champ theChamp)
        {
            for (int i = 0; i < this.ListeChamp.Count; i++)
            {
                if (((DB_Champ)this.ListeChamp[i]).getNom() == theChamp.getNom())
                    return false;
            }

            ListeChamp.Add(theChamp);
            return true;
        }

J'opterais plutot pour :
<hr />public
bool Add(
DB_Champ theChamp)
{

   if (ListeChamp.Contains(theChamp))
return
false;
   ListeChamp.Add(theChamp);
   return true;
}

<hr />
En ajoutant ces méthodes a ta classe DB_Champ :
<hr />public
override
string ToString()
{

   return
this.Nom;
}

public
override
int GetHashCode()
{

   return
this.Nom.ToLowerInvariant().GetHashCode();
}

public
override
bool Equals(
object obj)
{

   DB_Class t = obj
as
DB_Class;

   return t.Nom ==
this.Nom;
}
<hr />

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Ouah merci !!!

Herve
Commenter la réponse de Seth77
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Juste une question concernant cela :

public string Nom
{
   get { return this.nom; }
   set { this.nom = value;}
}

la declaration de la variable c bien : public string Nom
On appel comment les fonction getNom ?

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
les fonctions getNom et setNom deviennent Nom
en fait tu as :
private string nom;
public string Nom
{
   get { return this.nom;}
   set { this.nom = value;}
}

et tu les appeles ainsi :
tonObjet.Nom = "aaa"; // ce qui te servait de setNom
string leNom = tonObjet.Nom; // ce qui te servait de getNom

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Ah ok ...

mais cela marche aussi en mettant string "leNom = tonObjet.getNom();" pour le get ?
et si j'ai bien compris si je rajoute une fonction Toto j'aurais une fonction "TotoNom".....???

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Il n'y a plus de setNom ni de getNom.

C'est la propriété Nom, qui fait exactement la meme chose que ton setNom et getNom, qui les remplace.

Donc je répète avec de la couleur pour que ce soit plus clair ;)
<hr />private
string nom;
// Champ privé nom

public
string Nom
{

   get {
return
this.nom; }
// Agit comme getNom();
   set {
this.nom =
value; }
// Agie comme setNom(string theNom);
}
<hr />

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
D'accord ...en fait cela permet de modifier la variable private en passant par set et get comme si elle etait en public ...
Sinon c normal qu'il n y ait pas d'espace "publicstring Nom" ?

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Voila, c'est exactement ca.

Pour les espaces c'est pas normal, ils ont été mangé sur tout le post
il faut en rajouter partout ou il en manque ;)

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Ok

Une chose encore ...cela sert a quoi override ? si j'ai bien compris il faut mettre override pour definir une fonction qui est presente dans la classe abstraite dont l'objet est herité ?

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Voila, le mot clé override permet de reimplémenter un membre hérité d'une classe.
Dans ton cas, il s'agit de redefinir les méthodes de la classe Object (qui n'est pas abstraite)

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Merci !

Sinon au niveau de la structure de mon package est ce que cela semble "bien" ?

Herve
Commenter la réponse de Seth77
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Je ne trouve rien concernant l'objet List ?
faut il inclure qqchose ?

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Salut, il s'agit d'une classe generique du framework .Net 2, et il faut ajouter l'espace de nom System.Collection.Generics pour pouvoir l'utiliser.


Si tu bosses en .Net 1, alors tu dois rester avec un ArrayList.





Mx
MVP C#
 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Thx
je travaille avec .net 2 ...
je suis sous Microsoft Visual C# Express

Herve
Commenter la réponse de Seth77
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
Dans cette fonction :

public override bool Equals(object obj)
        {
           DB_Champ t = obj as DB_Champ;
           return t.Nom == this.nom;
        }

pourquoi ne pas passer directement un objet de type DB_Champ ....
Et "DB_Champ t = obj as DB_Champ;"  correspond bien à cela

DB_Champ t = (DB_Champ)obj;

on fait bien un cast ?

Herve
Commenter la réponse de Seth77
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
La méthode Equals prend en parametre object.
Sinon, oui, as effectue bien un cast, sauf si tu ne passe pas un DB_Champ en parametre, ce qui alors renverra null.
Il faut d'ailleurs controler si l'instance  de DB_Champ que j'ai nommée 't' n'est pas null, ce que j'ai oublier de faire dans le code ;)

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
567
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
24 janvier 2014
0
Merci
donc comme cela :

public override bool Equals(object obj)
        {
           DB_Champ t = obj as DB_Champ;
           if (t !=  null)
            return t.Nom == this.nom;
        }

Est ce que avec ton systeme de list est il possible de connaitre "rapidement" le nom (d'un element) a true sans pour autant parcourir la liste ?

Herve
Commenter la réponse de Seth77