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

Contribuez .NET Discussion :

Guid SQL et Type Guid du Framework


Sujet :

Contribuez .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut Guid SQL et Type Guid du Framework
    Ce n'est pas la première fois que je rencontre ce problème, mais jamais je n'ai trouvé de solution sur internet et dans les divers forums où je me suis adressé, autre que celle de dire "n'utilisez pas les guid". Je me permets donc de fournir ici une solution à un problème récurrent.
    La situation :
    On a une base de données Sql contenant des tables ayant une (ou des) colonne(s) de type UniqueIdentifier.
    Sous Visual Studio, on crée un Dataset typé avec le concepteur de Dataset : la colonne correspondante créée par le designer est de type System.Guid.
    Cependant, il est impossible d’affecter à une variable ou une propriété d’un objet de type System.Guid, le Guid du Dataset (pourquoi ? Mystère…) : on se retrouve avec une variable ou propriété qui vaut Empty, alors qu’un ToString sur cette variable renvoie bien le Guid ! Faites le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim test as System.Guid = System.Guid.NewGuid()
    Dim test2 as System.Guid = test
    test2 vaut Empty. Pourtant, test2.ToString affiche bien le Guid ! Si à la place d'une variable, c'est le membre d'une classe, qui ne peut être nul ou vide => exception à la clé !

    La solution :
    • Définir la variable ou la propriété devant recevoir le Guid en tant que que String.
    • Pour enregistrer le Guid du Dataset dans la variable ou propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse.ID = MonGuid.ToString
    • Pour retrouver un Guid à partir de la variable ou propriété précédemment définie (pour le comparer à un guid du Dataset lors d'une requête, par exemple, ou tout simplement pour enregistrer en base de données un objet):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonGuid = New Guid(MaClasse.ID)
    Et voilà !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je sais pas comment tu as fait ton compte, mais je viens de faire des tests et je n'ai pas du tout le problème que tu décris... ton problème doit venir d'ailleurs

    De toutes façons, ce n'est pas possible que ça se passe comme tu dis : Guid est un type valeur, donc quand tu le copies c'est toute la mémoire de l'objet qui est copiée, le résultat est donc forcément le même. D'ailleurs, si ToString renvoie la bonne valeur, le Guid n'est sûrement pas Empty...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut
    Oui, c'est bien pour ça que ce problème m'a fait m'arracher les cheveux : c'est à n'y rien comprendre. Pour info, je suis sous VS2008 Framework 3.5 SP1 et dans une appli Wpf. Le problème se reproduit en faisant le simple test que j'ai cité... Même la première variable test est affichée comme 'Empty' !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    Pour info, je suis sous VS2008 Framework 3.5 SP1 et dans une appli Wpf
    Idem, sauf que pour le test j'ai pas fait une appli WPF, juste une appli console

    Citation Envoyé par jacquesprogram Voir le message
    Même la première variable test est affichée comme 'Empty' !
    affichée où ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut
    Place un point d'arrêt après les instructions citées, et passe la souris au dessus de la variable test : résultat => Empty chez moi. Alors qu'un ToString dans l'Immediate Window renvoie bien le Guid !!!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    Place un point d'arrêt après les instructions citées, et passe la souris au dessus de la variable test : résultat => Empty chez moi. Alors qu'un ToString dans l'Immediate Window renvoie bien le Guid !!!
    C'est bien ce que j'ai fait
    Et chez moi quand je passe la souris au dessus, je vois "{System.Guid}", comme prévu... ça doit être un truc qui déconne dans ton IDE

Discussions similaires

  1. livre OCA SQL EXPERT EXAM GUIDE 1Z0-047
    Par rvfranck dans le forum Livres
    Réponses: 14
    Dernier message: 21/12/2009, 14h41
  2. Traduction fonction SAS Code SQL en SAS Guide
    Par mariekoala dans le forum Outils BI
    Réponses: 2
    Dernier message: 20/06/2009, 20h25
  3. Clé primaire de type GUID et type date
    Par Lucas Panny dans le forum SQL
    Réponses: 52
    Dernier message: 10/06/2008, 13h29
  4. [VB.NET][SQL SERVER] Champ auto de type guid
    Par SergeF dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/12/2007, 10h57
  5. [C#] Comment mettre un type Guid à null ?
    Par qwertz dans le forum C#
    Réponses: 3
    Dernier message: 23/06/2006, 11h25

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