Debut de package pour accès base de données

Résolu
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 4 sept. 2006 à 14:31
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 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

34 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
4 sept. 2006 à 17:22
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
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 14:42
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# 
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
4 sept. 2006 à 14:57
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 15:03
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# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:08
Ouah merci !!!

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:10
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 15:13
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# 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:16
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 15:24
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# 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:29
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 15:31
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# 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:38
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 15:42
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# 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 15:46
Merci !

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

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 16:05
Je ne trouve rien concernant l'objet List ?
faut il inclure qqchose ?

Herve
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 16:52
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#
 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 17:02
Thx
je travaille avec .net 2 ...
je suis sous Microsoft Visual C# Express

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 17:04
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 sept. 2006 à 17:12
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# 
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
4 sept. 2006 à 17:15
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
0
Rejoignez-nous