GUID(Globally Unique Identifier,全域唯一識別碼)是 128 位元整數,常用於分散式系統的唯一主鍵、元件識別、資料庫記錄識別。.NET 提供 System.Guid 結構與 Guid.NewGuid() 靜態方法,生成符合 RFC 4122 標準的 GUID。本文完整說明格式、生成方式、資料庫應用、類別屬性標註與多語言範例。
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(32 個十六進位字元 + 4 個連字號)337c7f2b-7a34-4f50-9141-bab9e6478cc8x 為 0-9 或 a-f演算法結合:
理論上全球任意兩台電腦生成的 GUID 不會重複。缺點:字串長度 36 字元,較長。
Guid guid = Guid.NewGuid(); // 產生新 GUID
string guidStr = guid.ToString(); // 標準格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
string guidN = guid.ToString("N"); // 無連字號:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
string guidD = guid.ToString("D"); // 標準格式(預設)
string guidB = guid.ToString("B"); // 大括號:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
string guidP = guid.ToString("P"); // 小括號:(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
| 語言 | 程式碼 |
|---|---|
| C# | |
| VB.NET | |
| J# | |
NEWID() 函數可在資料庫端生成using System;
using System.Data.SqlClient;
public class GuidDbExample
{
public void InsertRecord(string name)
{
string connStr = "Server=.;Database=Northwind;Integrated Security=true";
using (var conn = new SqlConnection(connStr))
{
conn.Open();
string sql = "INSERT INTO dbo.tblBuilderTest (pk_guid, name) VALUES (@guid, @name)";
using (var cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@guid", Guid.NewGuid());
cmd.Parameters.AddWithValue("@name", name);
cmd.ExecuteNonQuery();
}
}
}
}
最佳實務:使用參數化查詢防止 SQL 注入,避免字串拼接。
為類別或介面指定固定 GUID,用於 COM 互通、元件註冊、註冊表識別。
using System;
using System.Runtime.InteropServices;
[Guid("9245fe4a-d402-451c-b9ed-9c1a04247482")] // 指定固定 GUID
public class MyComClass
{
// 類別實作
}
InterfaceType(ComInterfaceType.InterfaceIsIUnknown))// 解析字串
Guid g1 = Guid.Parse("337c7f2b-7a34-4f50-9141-bab9e6478cc8");
bool success = Guid.TryParse(input, out Guid g2);
// 空 GUID(全零)
Guid empty = Guid.Empty; // 00000000-0000-0000-0000-000000000000
if (guid == Guid.Empty) ...
// 位元組陣列互轉
byte[] bytes = guid.ToByteArray();
Guid fromBytes = new Guid(bytes);
// 比較
int cmp = guid1.CompareTo(guid2);
System.Guid.NewGuid() 是 .NET 生成唯一識別碼的標準方式,適用於:
uniqueidentifier)掌握格式轉換、資料庫參數化插入、COM 屬性標註,能靈活應對各種唯一識別需求。