Press "Enter" to skip to content

GUID Generazione e uso

GUID Generazione e uso CAT:C#, Beginners, Tips Tags: classi, Csharp, Guid, helper Date:07/09/2007

I Global Unique identifiers, per gli amici GUID, sono per definizione degli Identificatori Globalmente Univoci, ciò significa che in tutto il pianeta, non accadrà mai che due PC possano generare un GUID identico. Ovviamente in informatica non c’è mai certezza, ma le probabilità che accada sono davvero così remote da rendere la cosa praticamente impossibile. Come un PC generi un GUID non ci interessa, ai fini di questo articolo, quel che ci interessa è scoprire i vari luoghi e modi ove li incontriamo, li possiamo usare e li possiamo generare e come manipolarli.

Per uno sviluppatore .NET, il primo posto ove capita di vedere un GUID è la finestra di configurazione progetto di qualsiasi Assembly prodotto con Visual Studio 2005

sco_guid01_assemblyguid

E se per caso colti da un attimo di follia cancellassimo questo GUID come ce ne procuriamo un’altro?

Visual Studio .NET conoscendo bene la legge di Murphy fornisce il necessario pertanto sul menu Tools>Create Guid> abbiamo la seguente finestra:

sco_guid01_createguid

Tramite questa finestra possiamo ottenere un Guid in varie forme creato sulla label o, molto opportunamente copiato nella clipboard per poterlo incollare ove necessario, il risultato delle 4 opzioni è il seguente:

  1. Implement Olecreate:
    // {87DC8822-4790-4a11-8B1F-6EBD03490804}
    IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
    0x87dc8822, 0x4790, 0x4a11, 0x8b, 0x1f, 0x6e, 0xbd, 0x3, 0x49, 0x8, 0x4);
  2. Define Guid:
    // {87DC8822-4790-4a11-8B1F-6EBD03490804}
    DEFINE_GUID(<<name>>,
    0x87dc8822, 0x4790, 0x4a11, 0x8b, 0x1f, 0x6e, 0xbd, 0x3, 0x49, 0x8, 0x4);
  3. static const struct GUID:
    // {87DC8822-4790-4a11-8B1F-6EBD03490804}
    static const GUID <<name>> =
    { 0x87dc8822, 0x4790, 0x4a11, { 0x8b, 0x1f, 0x6e, 0xbd, 0x3, 0x49, 0x8, 0x4 } };
  4. Registry format:
    {87DC8822-4790-4a11-8B1F-6EBD03490804}

Se invece volessimo generare o utilizzare un GUID all’interno di un programma in C# o VB, abbiamo a nostra disposizione la classe Guid da cui possiamo generarlo con il seguente codice:

C#

Guid myGuid = new Guid();
this.txtResult.Text = myGuid.ToString();

VB

Dim myGuid As New Guid() 
Me.txtResult.Text = myGuid.ToString()

Se invece avessimo un Guid in formato stringa e volessimo generare una classe Guid possiamo utilizzare sempre il costruttore che è in grado di convertire una stringa in guid da vari formati:

C#

Guid myGuid = new Guid(this.txtStringGuid.Text);
this.txtResult.Text = myGuid.ToString();

VB

Dim myGuid As New Guid(Me.txtStringGuid.Text) 
Me.txtResult.Text = myGuid.ToString()

Oppure possiamo utilizzare il Guidonverter:

C#

GuidConverter gConverter = new GuidConverter();
Guid myGuid = (Guid)gConverter.ConvertFromString(this.txtStringGuid.Text);
this.txtResult.Text = myGuid.ToString();

VB

Dim gConverter As New GuidConverter() 
Dim myGuid As Guid = DirectCast(gConverter.ConvertFromString(Me.txtStringGuid.Text), Guid) 
Me.txtResult.Text = myGuid.ToString()

I Guid li possiamo incontrare anche nei database, SQL Server li chiama UniqueIdentifiers invece di GUID, ma sono sempre la stessa cosa. In una tabella SQL Server.

Questa è una semplice tabella con due campi, un ID che è uno UniqueIdentifier, e una descrizione:

CREATE TABLE [dbo].[TbGuid](
    [ID] [uniqueidentifier] NOT NULL,
    [Descrizione] [nvarchar](255) NULL,
 CONSTRAINT [PK_TbGuid] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
     IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS  = ON, 
    ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

 

Per inserire dei dati all’interno della tabella, possiamo usare il codice seguente:

INSERT INTO [paperinik].[dbo].[TbGuid]
           ([ID]
           ,[Descrizione])
     VALUES
           (newid(),'test')

La funzione newid() di SQL Server genera un Guid assegnandolo al nostro campo ID.

Se volessimo usare questa tabella da .NET, non ci sono problemi, il campo UniqueIdentifier può essere riempito con il GUID da noi generato con l’apposita classe.

Ed ora, Buon Guid a tutti.