首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# .NET 生成 GUID 完整指南:格式、唯一性、資料庫應用、類別屬性標註

     編輯:關於C語言

前言

GUID(Globally Unique Identifier,全域唯一識別碼)是 128 位元整數,常用於分散式系統的唯一主鍵、元件識別、資料庫記錄識別。.NET 提供 System.Guid 結構與 Guid.NewGuid() 靜態方法,生成符合 RFC 4122 標準的 GUID。本文完整說明格式、生成方式、資料庫應用、類別屬性標註與多語言範例。

一、GUID 基本知識

格式規格

  • 128 位元(16 位元組)
  • 字串格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(32 個十六進位字元 + 4 個連字號)
  • 範例:337c7f2b-7a34-4f50-9141-bab9e6478cc8
  • 每個 x 為 0-9 或 a-f

唯一性保證

演算法結合:

  • 網路卡 MAC 位址(確保機器唯一)
  • 納秒級時間戳記(確保時間唯一)
  • 晶片 ID、隨機數等熵源

理論上全球任意兩台電腦生成的 GUID 不會重複。缺點:字串長度 36 字元,較長。

二、.NET 生成 GUID

核心 API

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#
Console.WriteLine("GUID: " + Guid.NewGuid().ToString());
VB.NET
Console.WriteLine("GUID: " + System.Guid.NewGuid().ToString())
J#
System.Console.WriteLine("GUID: " + System.Guid.NewGuid().ToString());

三、資料庫應用:主鍵與 SQL Server 整合

SQL Server uniqueidentifier 型別

  • 原生支援 GUID 儲存
  • NEWID() 函數可在資料庫端生成
  • 或由應用程式生成後插入(推薦,避免往返)

ADO.NET 插入範例

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 互通性

為類別或介面指定固定 GUID,用於 COM 互通、元件註冊、註冊表識別。

using System;
using System.Runtime.InteropServices;

[Guid("9245fe4a-d402-451c-b9ed-9c1a04247482")] // 指定固定 GUID
public class MyComClass
{
    // 類別實作
}

應用場景

  • COM 元件開發(需固定 GUID 供註冊表查找)
  • 介面識別(InterfaceType(ComInterfaceType.InterfaceIsIUnknown))
  • Windows 註冊表機碼命名
  • 跨程序/跨語言物件識別

五、進階:Guid 結構其他實用方法

// 解析字串
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 元件/介面註冊
  • 追蹤關聯 ID(相關性 ID)

掌握格式轉換、資料庫參數化插入、COM 屬性標註,能靈活應對各種唯一識別需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved