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à !