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

Windows Forms Discussion :

Perdu dans la programmation Objet


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut Perdu dans la programmation Objet
    Bonjour à tous,

    Je viens vous demander de l'aide car je suis dans un sacré pétrin.

    Alors voilà le problème : J'ai débuté un programme à l'aide de Visual C# 2008 Express, c'est une gestion de ma vidéothèque. Programme que je dois gérer en Objet. La base de donnée est elle gérée avec SQL Server.

    Je suis en 2nd année de BTS, et il se trouve que ces magnifiques cours ne nous ont pas appris à remplir une BDD en Objet... Comment, tout simplement, ajouter un nouveau film à ma BDD, mais en Objet? Les classes, les collections, c'est bien beau sur papier, mais comment faire et relier sa à une BDD?

    Comme vous l'avez compris je suis perdu, et je dois faire quelque chose de potable en 4jours. Je suis preneur de n'importe quelle information, aide, ou commentaire. Si vous avez de bons liens, ou de bonnes explications. J'ai un peu cherché sur le net, mais je ne trouve rien de précis là dessus.

    Merci d'avance, CleeM.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Insérer un objet dans une BDD en objet ça ne veut pas dire grand chose.

    Tu peux ici par exemple faire une classe static que tu pourrais appeler DbManager par exemple, cette classe mettrait à ta disposition plusieurs méthodes pour gérer les objets de ta BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static class DbManager
    {
       private DbProviderFactory mProvider = DbProviderFactories.GetFactory("System.Data.SqlClient");
     
       [...]
     
       public static void SaveVideo(Video video)
       {
          // ouverture connexion
     
         // ici tu ajoutes à ta BDD les différents membres de ta classe video
       }
    }
    Imaginons que tu ais ta classe comme ceci

    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
     
    public class Video
    {
       private string mTitle = null;
       private List<Actor> mActors = new List<Actor>();
       private string mAuthor = null;
     
       public Video(string title, string author, List<Actor> actors)
       {
          this.mTitle = title;
          this.author = author;
          this.actors = actors;
       }
     
       [...]
    }
    Tu aurais comme table dans ta BDD.

    Video
    id Primary Key int
    title nvarchar(50)
    author nvarchar(50)

    Author
    id Primary Key int
    id_video Foreign Key (table Video) int
    name nvarchar(50)
    ...

    Voilà, un exemple de comment faire.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Citation Envoyé par Skyrunner Voir le message
    Insérer un objet dans une BDD en objet ça ne veut pas dire grand chose.
    Pour info :
    Il me semble (car je ne l'ai jamais utilisé) que tu peux stocker des objets directement dans une DB (exemple DB40).
    Ce sujet a été abordé dans un post précédent.

    ici

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Citation Envoyé par Verb@l Voir le message
    Pour info :
    Il me semble (car je ne l'ai jamais utilisé) que tu peux stocker des objets directement dans une DB (exemple DB40).
    Ce sujet a été abordé dans un post précédent.

    ici
    Tout à fait,

    mais (DB4O) c'est une DB extremement particuliere, les BDD objets en etant encore a leurs balbutiements. Quand on parle de DB, on sous entend souvent une DB relationnelle, et c'est sur ce point que SkyRunner voulait intervenir je pense, car en relationnel il faut mapper les champs de la BDD à l'objet (et vice-versa).

  5. #5
    Membre éprouvé Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Citation Envoyé par Verb@l Voir le message
    Pour info :
    Il me semble (car je ne l'ai jamais utilisé) que tu peux stocker des objets directement dans une DB (exemple DB40).
    Ce sujet a été abordé dans un post précédent.

    ici
    Oui il existe des BD objet (comme celle que tu cites) mais SQL Server est une "bonne vieille" (rien de péjoratif ) BD relationnelle. Dans ce cas, pour faire "comme si on insérait des objets" dans une BD relationnelle, on met généralement en place une couche de persistance qui fait automatiquement le mapping objet/relationnel (type nhybernate, Linq for SQL, etc), mais pour le besoin de l'auteur du post, ça me semble un peu exagéré comme solution

    J'aurai donc moi aussi tendance à faire ça "à la main" par quelques requêtes (ou alors y'a la solution du dataset typé qui fait aussi un mapping objet/relationnel et qui est plus simple à mettre en oeuvre, non ?).

    Edit : Désolé pour le double post, ça m'apprendra à faire Refresh avant de répondre

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par CleeM Voir le message
    Comment, tout simplement, ajouter un nouveau film à ma BDD, mais en Objet? Les classes, les collections, c'est bien beau sur papier, mais comment faire et relier sa à une BDD?
    Grâce au "Mapping Objet / Relationnel" : et c'est bien triste que ca ne soit pas encore au programme des cours... Tout comme l'architecture n-Tier....

    Un conseil : si tu comptes chercher du boulot, et surtout faire du boulot intéressant, mets y toi. Si tu connais déjà ces notions les boites seront bien soulagées que tu n'ai pas à les apprendre sur ton temps de travail... (et c'est un gros bonus tout de suite sur le CV par rapport à tes potes)

    C'est pas très compliqué en soi, mais comme toujours le vocabulaire qui va avec est déroutant.

    Renseignes toi sur le site de developpez, il y a quelques tutos.
    Ensuite tu verras que des outils de MOR comme nHibernate couplé à Accéléo ou EUSS, qui te génère tout à ta place (et en mieux) c'est très pratique...

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Oui j'entendais une BDD relationnelle type SqlServer.

    On peut bien entendu comme l'a souligné Chubyone utiliser des outils comme nHibernate où le lien entre la BDD et l'objet est assez fort et où on n'a plus à taper une seule ligne SQL.

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Merci beaucoup pour ces réponses, cependant je ne peux pas trop me permettre de recherche quel façon de faire est mieu ou non, là je dois programmer et faire quelque chose de potable asser rapidement. =/ Mais plus tard il va falloir que je poffine sa et j'irais regarder de plus près les différentes façon de faire!

    Skyrunner, pourrais-tu m'expliquer ce que je dois mettre ici s'il te plait :

    public static void SaveVideo(Video video)
    {
    // ouverture connexion

    // ici tu ajoutes à ta BDD les différents membres de ta classe video
    }

    voilà mes classes si sa peut aider :

    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
    44
     
       class Film
        {
            private int ID_Film;
            private string Titre;
            private int Duree;
            private int ID_Genre;
            private int ID_Avis;
            private string Affiche;
     
            public void Init (int IdF, string T, int D, int IdG, int IdA, string A)
            {
                this.ID_Film = IdF;
                this.Titre = T;
                this.Duree = D;
                this.ID_Genre = IdG;
                this.ID_Avis = IdA;
                this.Affiche = A;
            }
        }
     
        class Avis
        {
            private int ID_Avis;
            private string Nom_Avis;
     
            public void Init(int IdA, string N)
            {
                this.ID_Avis = IdA;
                this.Nom_Avis = N;
            }
        }
     
        class Genre
        {
            private int ID_Genre;
            private string Nom_Genre;
     
            public void Init(int IdG, string N)
            {
                this.ID_Genre = IdG;
                this.Nom_Genre = N;
            }
        }

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ah là par contre je vais te laisser faire un peu de recherche.

    C'est très simple
    http://ditch.developpez.com/dotnet/factories/

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Pfiou je rame ^^'

    En fait je crois avoir trouvé pour la connection à la BDD, mais maintenant c'est le code que je dois mettre pour enregister une valeur entrée (par l'utilisateur) dans un des membres de ma classe.

    Pour l'instant j'ai sa (suis-je sur le bon chemin?) :

    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
     
        public static class DbManager
        {
            private DbProviderFactory mProvider = DbProviderFactories.GetFactory("System.Data.SqlClient");
     
        public static void SaveFilm(Film film)
        {
            // ouverture connexion
            IDbConnection dbconn = dbfactory.CreateConnection();
            dbconn.Open();
            IDbCommand dbcomm = dbconn.CreateCommand();
            dbcomm.Connection = dbconn;
            // ici tu ajoutes à ta BDD les différents membres de ta classe Film
     
     
        }
        }

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Citation Envoyé par CleeM Voir le message
    Pfiou je rame ^^'
    C'est bien ! C'est que ca rentre. =p

    Oui, tu es sur la bonne voie. Maintenant que tu as ta command, il faut entrer le SQL d'insertion. Je te conseille de te renseigner sur les DBParameter pour adapter ta command.

    Enfin dernier conseil, n'oublie pas qu'une connection ca se dispose (cf keyword "using").

    Bon courage. =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] perdu dans mon foreach d'array et d'objet
    Par noobC dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2008, 09h37
  2. Réponses: 2
    Dernier message: 02/06/2006, 12h59
  3. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

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