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

C# Discussion :

Comment (bien) lier une base de données à son application [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Comment (bien) lier une base de données à son application
    Bonjour,

    Je suis encore un débutant en C# et je recherche les bonnes pratiques pour lier une base de données à son application (WPF).

    Actuellement je pratique de la façon suivante :

    Par exemple, j’exécute une requête sql pour extraire les données administrative de personnes que je place dans une datatable. A partir de cette datatable je réalise une liste d’objet personne.

    L’interface est bien liée à ma liste d’objet. Par contre je ne sais pas comment faire pour répercuter les modifications de ma liste d’objet personne à ma base de données. Pour le moment je détecte chaque modification faite sur la liste pour les répercuter via des requêtes sql (update/delete/insert) sur la BDD.

    Dans ma façon de faire ce qui m’embête c’est de devoir faire les update/delete… directement sur ma BDD.

    Ma question est donc, déjà de savoir si ma démarche est la bonne et comment répercuter automatique les modifications de la liste de personne à ma BDD. Si ma démarche n’est pas la bonne alors comment faut-il faire pour interagir proprement avec une base de données.

    Merci d’avance pour vos réponses et si possible vos exemples.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 64
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Je pense qu'il te serait utile de regarder du côté de ADO .Net, dont voici un cours.

    Si tu as des questions, n'hésites pas.

    Cordialement,
    Clemou01

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En fait, parmi les "bonnes" pratiques (je met "bonnes" entre guillemets car ça reste quand même très relatif) il y a le pattern "MVVM" dont l'idée est de séparer la partie "vue" (IHM, les fenêtres WPF en l'occurrence) et la partie "Modèle" (données qui sont associées à la vue). Et la partie "modèle" communique avec la partie DAL (data access layer, la partie "couche de données").

    WPF est optimisé dans cette optique, en voulant notamment favoriser ce qu'on appelle le "DataBinding". Le databinding consiste à dire qu'une interface est liée à un "objet métier" qui est agnostique de l'IHM.

    Pour les objets "métier", on leur implémente souvent l'interface "INotifyPropertyChanged" qui contient un événement "PropertyChanged" auquel s'abonnent les éléments d'IHM de WPF pour savoir que telle ou telle propriété de l'objet métier a changé. C'est là-dessus que, par exemple, tu peux lancer un "update" dans ta BDD.

    Après pour les listes databindées pour WPF il y a une classe "ObservableCollection" qui notifie les changements d'ajout et de suppression des éléments dans la liste. On peut s'en servir par exemple pour faire des "INSERT" dans le cas d'un ajout et des "DELETE" dans le cas de suppressions.

    Donc avec une "ObservableCollection" d'un type qui implémente "INotifyPropertyChanged" ça couvre l'ensemble des besoins de notifications.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos réponses.

    C’est effectivement dans le cadre du pattern MVVM que je me pose cette question. A la lecture de la réponse de Ph_Gr, je pense que je suis sur la bonne voie.

    Auriez-vous par hasard un exemple qui met en valeur cette liaison de données ? Car les exemples que je trouve créé l’ "ObservableCollection" travail dessus mais décrive pas comment la mise à jour de la BDD est effectuée.

    Actuellement ce que je fais fonctionne très bien mais étant débutant je cherche à connaitre les bonnes pratiques.

    Merci d’avance.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Avec la classe "ObservableCollection", tu peux d'abonner à l'événement CollectionChanged.

    S'abonner à CollectionChanged permet de pouvoir effectuer une action lorsque la collection change avec un ajout, une suppression, etc... Tu peux savoir quel type de changement est effectué grâce à la valeur de la propriété "Action" du paramètre de type NotifyCollectionChangedEventArgs. Il y a d'autres propriétés intéressantes avec ce paramètre, je te laisse y jeter un œil. Avec cet événement, tu peux faire par exemple un "INSERT" dans ta base si Action vaut "Add" ou un delete si Action vaut "Remove".

    Après, il y a la modification d'une propriété d'un objet de la collection. Pour qu'une telle notification soit possible, le type générique de ta collection doit implémenter l'interface "INotifyPropertyChanged". Et tu devras aussi gérer toi-même la notification via cette interface.
    Exemple :
    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
     
    public class Person : INotifyPropertyChanged   
        {   
            public event PropertyChangedEventHandler PropertyChanged; //De l'interface "INotifyPropertyChanged
     
            public string Name   
            {   
                get { return m_Name; }   
                set {
                        if (m_Name != value)
                        {
                            m_Name = value;
                            OnPropertyChanged("Name"); //Déclenchera la notification du changement de propriété
                        }
                     }
            }   
            string m_Name;   
     
            protected void OnPropertyChanged(string name)   
            {   
                if (PropertyChanged != null)   
                {   
                    PropertyChanged(this, new PropertyChangedEventArgs(name));   
                }   
            }   
        }
    Après ça, si tu t'abonne au "PropertyChanged" d'un objet "Person", tu pourras faire un update à ce moment là par exemple.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour vos réponses, je vais pouvoir continuer mon petit programme sur de bonnes bases.

    Bonne continuation à tous et encore merci pour votre aide.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2015, 13h05
  2. Comment lier une base de donnée access à un calendrier
    Par Neustadt dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 25/11/2014, 18h07
  3. [WD18] Comment lier une base de données Firebird avec Windev 18
    Par lucie22 dans le forum WinDev
    Réponses: 6
    Dernier message: 23/01/2013, 10h37
  4. Réponses: 2
    Dernier message: 27/06/2006, 09h15
  5. Peut on lier une base de donnée Mysql avec MS Project
    Par casper24 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/04/2006, 22h21

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