Hopes

          Start Here..

           

          C#中使用GUID

          C#中使用GUID

          GUID(全局統(tǒng)一標(biāo)識(shí)符)是指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的。通常平臺(tái)會(huì)提供生成GUID的API。生成算法很有意思,用到了以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字。GUID的唯一缺陷在于生成的結(jié)果串會(huì)比較大。” 
          1. 一個(gè)GUID為一個(gè)128位的整數(shù)(16字節(jié)),在使用唯一標(biāo)識(shí)符的情況下,你可以在所有計(jì)算機(jī)和網(wǎng)絡(luò)之間使用這一整數(shù)。

          2. GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個(gè) x 是 0-9 或 a-f 范圍內(nèi)的一個(gè)十六進(jìn)制的數(shù)字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即為有效的 GUID 值。

          3. 世界上(Koffer注:應(yīng)該是地球上)的任何兩臺(tái)計(jì)算機(jī)都不會(huì)生成重復(fù)的 GUID 值。GUID 主要用于在擁有多個(gè)節(jié)點(diǎn)、多臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)或系統(tǒng)中,分配必須具有唯一性的標(biāo)識(shí)符。

          4. 在 Windows 平臺(tái)上,GUID 應(yīng)用非常廣泛:注冊(cè)表、類(lèi)及接口標(biāo)識(shí)、數(shù)據(jù)庫(kù)、甚至自動(dòng)生成的機(jī)器名、目錄名等。

           

          .NET中使用GUID

          GUID 在 .NET 中使用非常廣泛,而且 .NET Framework 提供了專(zhuān)門(mén) Guid 基礎(chǔ)結(jié)構(gòu)。
          Guid 結(jié)構(gòu)的常用法包括:
          1) Guid.NewGUID() 
          生成一個(gè)新的 GUID 唯一值
          2) Guid.ToString()
          將 GUID 值轉(zhuǎn)換成字符串,便于處理
          3)構(gòu)造函數(shù) Guid(string) 
          由 string 生成 Guid 結(jié)構(gòu),其中string 可以為大寫(xiě),也可以為小寫(xiě),可以包含兩端的定界符“{}”或“()”,甚至可以省略中間的“-”,Guid 結(jié)構(gòu)的構(gòu)造函數(shù)有很多,其它構(gòu)造用法并不常用。

          .NET Framework 中可以使用類(lèi) GuidConverter 提供將 Guid 結(jié)構(gòu)與各種其他表示形式相互轉(zhuǎn)換的類(lèi)型轉(zhuǎn)換器。

           

          在C#中生成一個(gè)GUID

          處理一個(gè)唯一標(biāo)識(shí)符使得存儲(chǔ)和獲得信息變得更加容易。在處理一個(gè)數(shù)據(jù)庫(kù)中這一功能變得尤其有用,因?yàn)橐粋€(gè)GUID能夠操作一個(gè)主鍵。

          同樣,SQL Server也很好地集成了GUID的用途。SQL Server數(shù)據(jù)類(lèi)型uniqueidentifier能夠存儲(chǔ)一個(gè)GUID數(shù)值。你可以通過(guò)使用NEWID()函數(shù)在SQL Server中生成這一數(shù)值,或者可以在SQL Server之外生成GUID,然后再手動(dòng)地插入這一數(shù)值。

          在.NET中,后面一種方法顯得更加直接。.NET Framework中的基本System類(lèi)包括GUID數(shù)值類(lèi)型。除此之外,這一數(shù)值類(lèi)型包含了處理GUID數(shù)值的方法。特別地,NewGUID方法允許你很容易地生成一個(gè)新的GUID。

           

           


           1using System; 
           2namespace DisplayGUID
           3{
           4    class Program
           5    {
           6        static void Main(string[] args)
           7        {
           8            GenerateGUID();
           9        }

          10        static void GenerateGUID()
          11        {
          12            Console.WriteLine("GUID:" + System.Guid.NewGuid().ToString());
          13        }

          14    }

          15}

           

          下面為這一程序的輸出:(雖然不同系統(tǒng)之間的GUID是變化的。)

          GUID: 9245fe4a-d402-451c-b9ed-9c1a04247482

          以上范例使用到System.Guid空間名稱(chēng)的NewGuid函數(shù)來(lái)返回一個(gè)數(shù)值。在這一點(diǎn)上,你可以看到GUID是一個(gè)很好的功能,但在程序的什么地方使用到它們,并如何使用它們?

           

          在程序中使用一個(gè)GUID

          一個(gè)GUID可以在后臺(tái)數(shù)據(jù)庫(kù)中操作一個(gè)主鍵。以下代碼使用一個(gè)GUID在一個(gè)后臺(tái)數(shù)據(jù)庫(kù)中存儲(chǔ)信息,這一數(shù)據(jù)庫(kù)包含以下的列:

          pk_guid  —uniqueidentifier  數(shù)據(jù)類(lèi)型 
          name      —nvarchar  數(shù)據(jù)類(lèi)型 
          這樣出現(xiàn)一個(gè)包含文本框的簡(jiǎn)單Windows窗體。當(dāng)選擇按鈕時(shí),文本框中的數(shù)據(jù)被插入到數(shù)據(jù)庫(kù)中name列。通過(guò)程序代碼可以生成一個(gè)GUID并存儲(chǔ)在pk_guid列中:

           


           1using System;
           2using System.Collections.Generic;
           3using System.ComponentModel;
           4using System.Data;
           5using System.Drawing;
           6using System.Linq;
           7using System.Text;
           8using System.Windows.Forms;
           9using System.Data.SqlClient;
          10
          11namespace GuidSqlDBExample
          12{
          13    public partial class Form1 : Form
          14    {
          15        public Form1()
          16        {
          17            InitializeComponent();
          18        }

          19
          20        private void btnInsert_Click(object sender, EventArgs e)
          21        {
          22            string _str = "server=(local);Initial Catalog=TestGuid;Integrated Security=SSPI";
          23            using (SqlConnection conn = new SqlConnection(_str))
          24            {
          25                try
          26                {
          27                    string _sqlInsert = "INSERT INTO dbo.Guid(pk_guid, name) VALUES ('"+ System.Guid.NewGuid().ToString() + "', '" + txtName.Text + "')";
          28                    conn.Open();
          29                    SqlCommand _cmd = new SqlCommand(_sqlInsert, conn);
          30                    _cmd.ExecuteNonQuery();   
          31                }

          32                catch (Exception ex)
          33                {
          34                    System.Console.Write("Error: " + ex.Message);
          35                }

          36            }

          37        }

          38    }

          39
          40}

           

           


          另一個(gè)GUID程序?qū)⒁粋€(gè)唯一的標(biāo)識(shí)符分配給一個(gè).NET類(lèi)或者接口,也就是說(shuō),GUID作為一個(gè)屬性被分配給類(lèi)或者接口。可以使用標(biāo)準(zhǔn)屬性語(yǔ)法來(lái)實(shí)現(xiàn)這一過(guò)程: 本

          我們可以擴(kuò)展第一個(gè)范例來(lái)分配一個(gè)GUID。System.Runtime.InteropServices空間名稱(chēng)必須被引用來(lái)使用GUID屬性。以下C#代碼實(shí)現(xiàn)了這一過(guò)程:

           

           


           1using System;
           2using System.Collections.Generic;
           3using System.Linq;
           4using System.Text;
           5using System.Runtime.InteropServices; 
           6
           7namespace GuidTest
           8{
           9    [Guid("9245fe4a-d402-451c-b9ed-9c1a04247482")] 
          10    class Program
          11    {
          12        static void Main(string[] args)
          13        {
          14            GenerateGUID();
          15        }

          16        static void GenerateGUID()
          17        {
          18            Console.WriteLine("GUID:" + System.Guid.NewGuid().ToString());
          19        }

          20    }

          21}

           


          GUID永遠(yuǎn)是方便的
          對(duì)于程序開(kāi)發(fā)的各個(gè)方面,.NET Framework簡(jiǎn)化了建立和處理GUID數(shù)值的過(guò)程。在.NET程序需要的地方,這一功能很容易地生成唯一的數(shù)值。

          分類(lèi): C#

          posted on 2012-05-09 15:25 ** 閱讀(1323) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          新聞檔案

          相冊(cè)

          收藏夾

          C#學(xué)習(xí)

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 古浪县| 贵德县| 宜兰市| 林甸县| 丹巴县| 锡林浩特市| 永宁县| 桃源县| 惠东县| 北辰区| 扶余县| 嘉禾县| 万州区| 凤庆县| 临沧市| 屯昌县| 宜阳县| 雅安市| 巴青县| 福贡县| 泸溪县| 五原县| 搜索| 武威市| 河池市| 上栗县| 离岛区| 台北县| 永兴县| 手游| 蕉岭县| 永和县| 海南省| 嘉定区| 墨竹工卡县| 隆林| 宜昌市| 体育| 南皮县| 上高县| 蒙山县|