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 :

Création d'un ID unique dans une base XAML [Débutant]


Sujet :

C#

  1. #1
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut Création d'un ID unique dans une base XAML
    Bonjour à tous,

    Je réalise une petite appli de gestion d'aquarium (C# / WPF et Xaml) et je viens de me rendre compte que j’ai déclaré les identifiants uniques de mes objets, mais que je ne les ai jamais initialisés.

    J'ai bien enregistré chaque poisson créé dans ma base xalm, mais je ne sais pas comment faire pour chercher le dernier ID (d'autant plus que pour l'instant il n'y en à pas …puisque je les avais oubliés…)
    Voila comment j'ai construit ma classe "modèle de poisson" sobrement intitulée: "Fiche_wiki_Poisson"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class C_Wiki_Poisson
        {
            ushort ID_Wiki_Poisson { get; set; }
            public string Nom_Wiki_Poisson { get; set; } 
            public string Nomscientific_Wiki_Poisson { get; set; } 
            public string Espece_Wiki_Poisson { get; set; } 
            public string Famille_Wiki_Poisson { get; set; }
            public string Origin_geo_Wiki_Poisson { get; set; } 
    //...etc
    }
    Voila comment j'enregistre les données saisies:

    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
    public partial class Fiche_Wiki_Poisson : UserControl // Wiki_Poisson
        {
            private ObservableCollection<C_Wiki_Poisson> myListeWiki_Poissons;
     
    		public Fiche_Wiki_Poisson(ref ObservableCollection<C_Wiki_Poisson> _tempList)
            {
                InitializeComponent();
                myListeWiki_Poissons = _tempList;
                this.DataContext = myListeWiki_Poissons;
            }
     
            private void Bt_Add_Wiki_Poisson_Click(object sender, RoutedEventArgs e)
            {
                C_Wiki_Poisson tempWiki_Poisson = new C_Wiki_Poisson();
                myListeWiki_Poissons.Add(tempWiki_Poisson);
                Listview_Wiki_Poissons.SelectedItem = tempWiki_Poisson;
                Tbx_Nom_Wiki_Poisson.Focus();
            }
     
            private void Bt_Save_Wiki_Poisson_Click(object sender, RoutedEventArgs e)
            {
     
                XmlSerializer xs_Wiki_Poisson = new XmlSerializer(typeof(ObservableCollection<C_Wiki_Poisson>));
                string filePath = @"\bdd\Wiki_Poisson.xml";
                using (StreamWriter wr_Wiki_Poisson = new StreamWriter(filePath))
     
    // c'est ici que je voudrais tester ma base XAML pour récupérer et incrémenter le dernier ID            
     
                {
                    xs_Wiki_Poisson.Serialize(wr_Wiki_Poisson, myListeWiki_Poissons);
     
                    MessageBox.Show("Données enregistrées");
                }
            }
     
            private void Bt_Suppr_Wiki_Poisson_Click(object sender, RoutedEventArgs e)
            {
                if (Listview_Wiki_Poissons.SelectedItem != null)
                    myListeWiki_Poissons.Remove(Listview_Wiki_Poissons.SelectedItem as C_Wiki_Poisson);
            }
        }
    Ce projet est assez ancien, et j'essaye de l'avancer sur mon temps libre dans un but purement d'apprentissage, donc mon style n'est pas des plus pures…
    merci à tous.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Par défaut
    Bonjour,

    je ne sais pas si c'est la bonne méthode, mais c'est comme ça que je fonctionne
    normalement c'est la base de donnée qui gère l'identifiant unique ce qui permet de faire une requete pour trouvé celui que l'on veut

    mais si tu le fait en code vaut mieux passer par un GUID (GUID.NEW()), c'est fait pour ça

  3. #3
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    oui sauf que ma base de données n'est qu'un fichier XAML et donc c'est pas comme une base sql ou tu te contente de créer tes tables et d'indiquer quel champs est une clé primaire ou le programme doit faire le reste

    je vais voir pour le GUID (GUID.NEW())

    merci

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    Si tu n'as pas d'accès concurrent aux données on pourrait imaginer que tu enregistres pareillement (*) une valeur genre "LastUniqIndex".
    A chaque fois que tu insères un nouvel enregistrement de poisson tu le fait avec cette valeur +1 comme uid, puis tu la mets à jour.

    (*) "pareillement" car je ne sais pas du tout comment fonctionne une -pseudo- base de données en XAML.

  5. #5
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    Salut jopopmk, je ne sais pas ce que tu appelles des accès concurrents aux données, mais imagine une sorte de répertoire de nom dans ton agenda avec Nom / prénom / n°tel pro / n° tel perso.... etc , je dois pouvoir créer, trier, modifier, supprimer (rendre invisible car je souhaite garder des traces de mes poissons morts ) etc.

    mon identifiant unique ne me servira qu'à retrouver un poisson dans une liste et m'afficher toutes les données s'y rattachant... comme un contact dans un répertoire...

    lastuniqueindex c'est l'idée de base, maintenant il faut le retrouver dans mon ficher xaml et c'est la que le ba blaisse...

    voici à quoi ressemble un exemple "d'enregistrement" dans la base de données après serialisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Id>123</Id>
      <LastName>Dupond</LastName>
      <FirstName>Jean</FirstName>
    </Person>

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Oki, c'est du XML en fait.

    Alors quelques précisions :
    - des accès concurrents aux données c'est quand plusieurs personnes (programmes, threads ...) essaie d'accéder/modifier/écrire des données en même temps, ce qui n'a pas l'air d'être ton cas,
    - "supprimer pour rendre invisible" c'est ce qu'on appelle une suppression logique (en fait tu mets un flag à true ou false),
    - l'identifiant unique sert normalement avant tout à gérer une contrainte d'unicité, pas toujours nécessaire. Dans ton cas, quand tu vas chercher le poisson "wanda" de l'espèce "poisson pané" d'origine "Captain Igloo" tu te rappelleras que son ID c'est le "713" ? Ou pire le "124a-89uy-plif-plaf-lagi-rafe" (ce que te donne un Global Unique ID - ou GUID) ? Ne vaudrait-il pas mieux baser tes recherches sur le nom ? Ou sur un couple nom/espèces si tu as 2 poissons qui s'appellent Jean-Jacques ?

  7. #7
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    Alors oui, je viens de regarder le GUID , les valeurs retournées semblent largement trop complexes pour une petite appli comme la mienne.

    Et effectivement, le couple nom + espèce peut être une très bonne option pour la partie encyclopédie qui sert de modèle en quelque sorte.

    Par contre dans la partie population (c'est à dire les poissons que je possède vraiment, si j'ai plusieurs individus de la même valeur il va bien falloir les différencier ...

  8. #8
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Ben quand tu feras un listing complet tu verras effectivement plusieurs "lignes" si tu as plusieurs entrées totalement identiques.
    Mais à quoi servira précisément ce numéro unique ? Tu verras que c'est deux enregistrements différents, mais ça ne te diras pas s'il s'agit d'un doublon ou non.

  9. #9
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    C'est bien là le problème.

    je ne souhaite pas afficher l'ID, c'est juste un numéro qui me servira au tri ou au calcul des nouveaux ID. dans les faits:

    j'affiche dans ma combobox la liste des poissons crées dans mon encyclopédie je vais donc être obligé d’être très précis pour permettre de le sélectionner rapidement.

    ex genre / espèce / variété

    par contre dans la liste des poissons que je possède vraiment , cette précision est encore plus longue car je peux avoir une cinquantaine de poissons "identiques" et à part les différencier par un n° "complémentaire"....

    en tout cas merci.

  10. #10
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Oki, je saisi un peu mieux la problématique.
    Du coup, autre proposition : plutôt que d'avoir x enregistrements totalement identiques (à part le fameux "id"), cela ne conviendrait-il pas d'avoir un compteur ? Il serait alors plus facile d'incrémenter/décrémenter cette valeur (voire avoir plusieurs compteurs pour ton cas des poissons morts ), et ça t'éviterait de pourrir ton fichier de données d'informations dupliquées.

    Sinon il te reste les deux premières solutions proposées : un GUID ou un compteur à part dans tes données.
    Pour cette dernière solution, et en reprenant ton exemple XML plus haut, je verrais bien un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <persons lastid="123">
      <person>
        <id>123</id>
        <firstname>John-Kevin</firstname>
        <lastname>LeMerlu</lastname>
        <deceased>false</deceased>
      </person>
      <! -- etc ... -->
    </persons>
    Les fonctions de déserialisation du .NET doivent savoir gérer ça.
    Sinon au lieu de l'attribut tu mets une sous-balise (je trouve ça moins propre perso).

  11. #11
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    Bon, je pense que je vais rester sur un ID identifié par la concaténation "genre / espece / variété" dans un premier temps pour les "modèles" et essayer le même ID avec en plus un compteur pour différencier les poissons "physiques".
    ça va difficile pour les calculs mais comme je n'affiche pas mes ID, ce n'est peut être pas si gênant que ça.

    imagines....
    Ancistrus Dolichoptérus Variégatus pour l'ID du "Modèle"


    Ancistrus Dolichoptérus Variégatus 001
    Ancistrus Dolichoptérus Variégatus 002
    Ancistrus Dolichoptérus Variégatus 003, pour les poissons physiques.... (et encore c'est pas les noms les plus longs....)

    je ne me rend pas bien compte si c'est gênant "informatiquement" parlant d'avoir un ID de cette forme, mais quand je vois les GUID à rallonge....
    en tout cas , merci de te pencher sur mon problème.

  12. #12
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Ton plus gros souci risque d'être les poissons qui s'enfuient sur la plage, poursuivient par une bulle géante et qui te crient : "Je ne suis pas un numéro !" (fais gaffe au 6, c'est un briscard) ...

    Allez, bon dev

  13. #13
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 427
    Par défaut
    Haaaa le prisonnier...cultissime...
    Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/09/2014, 15h40
  2. [MySQL] Création d'un document Word dans une base de données
    Par afifi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/04/2009, 08h50
  3. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  4. [VB.NET] création d'une table dans une base access
    Par smedini dans le forum Accès aux données
    Réponses: 1
    Dernier message: 31/12/2005, 11h53
  5. création d'une table dans une base de donnée accèss
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/10/2005, 10h54

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