zoukankan      html  css  js  c++  java
  • (转载)C#中使用GUID

    原文地址:http://www.cnblogs.com/dongqi/archive/2008/10/13/1310128.html GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生成的结果串会比较大。” 1. 一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。 2. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即为有效的 GUID 值。 3. 世界上(Koffer注:应该是地球上)的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。 4. 在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。 (一).NET中使用GUID GUID 在 .NET 中使用非常广泛,而且 .NET Framework 提供了专门 Guid 基础结构。包括: 1) Guid.NewGUID() 生成一个新的 GUID 唯一值 2) Guid.ToString()将 GUID 值转换成字符串,便于处理 3)构造函数 Guid(string) 由 string 生成 Guid 结构,其中string 可以为大写,也可以为小写,可以包含两端的定界符“{}”或“()”,甚至可以省略中间的“-”,Guid 结构的构造函数有很多,其它构造用法并不常用。 .NET Framework 中可以使用类 GuidConverter 提供将 Guid 结构与各种其他表示形式相互转换的类型转换器。 (二)在C#中生成一个GUID SQL Server也很好地集成了GUID的用途。SQL Server数据类型uniqueidentifier能够存储一个GUID数值。你可以通过使用NEWID()函数在SQL Server中生成这一数值,或者可以在SQL Server之外生成GUID,然后再手动地插入这一数值。 在.NET中,后面一种方法显得更加直接。.NET Framework中的基本System类包括GUID数值类型。除此之外,这一数值类型包含了处理GUID数值的方法。特别地,NewGUID方法允许你很容易地生成一个新的GUID。 using System; namespace DisplayGUID { class Program { static void Main(string[] args) { GenerateGUID(); } static void GenerateGUID() { Console.WriteLine("GUID:" + System.Guid.NewGuid().ToString()); } } } 下面为这一程序的输出:(虽然不同系统之间的GUID是变化的。) GUID: 9245fe4a-d402-451c-b9ed-9c1a04247482 以上范例使用到System.Guid空间名称的NewGuid函数来返回一个数值。在这一点上,你可以看到GUID是一个很好的功能,但在程序的什么地方使用到它们,并如何使用它们? (二)在程序中使用一个GUID 一个GUID可以在后台数据库中操作一个主键。以下代码使用一个GUID在一个后台数据库中存储信息,这一数据库包含以下的列: pk_guid —uniqueidentifier 数据类型 name —nvarchar 数据类型 这样出现一个包含文本框的简单Windows窗体。当选择按钮时,文本框中的数据被插入到数据库中name列。通过程序代码可以生成一个GUID并存储在pk_guid列中: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace GuidSqlDBExample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnInsert_Click(object sender, EventArgs e) { string _str = "server=(local);Initial Catalog=TestGuid;Integrated Security=SSPI"; using (SqlConnection conn = new SqlConnection(_str)) { try { string _sqlInsert = "INSERT INTO dbo.Guid(pk_guid, name) VALUES ('"+ System.Guid.NewGuid().ToString() + "', '" + txtName.Text + "')"; conn.Open(); SqlCommand _cmd = new SqlCommand(_sqlInsert, conn); _cmd.ExecuteNonQuery(); } catch (Exception ex) { System.Console.Write("Error: " + ex.Message); } } } } } 另一个GUID程序将一个唯一的标识符分配给一个.NET类或者接口,也就是说,GUID作为一个属性被分配给类或者接口。可以使用标准属性语法来实现这一过程: 本 我们可以扩展第一个范例来分配一个GUID。System.Runtime.InteropServices空间名称必须被引用来使用GUID属性。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace GuidTest { [Guid("9245fe4a-d402-451c-b9ed-9c1a04247482")] class Program { static void Main(string[] args) { GenerateGUID(); } static void GenerateGUID() { Console.WriteLine("GUID:" + System.Guid.NewGuid().ToString()); } } } 注意点:在SQLserver中,uniqueidentifier是可以置为null的,而在C#中,guid是值类型,是不可以为空的。 延伸阅读:http://www.cnblogs.com/jeffwongishandsome/archive/2011/05/02/2034403.html https://msdn.microsoft.com/zh-cn/library/system.guid(v=vs.100).aspx
  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5408886.html
Copyright © 2011-2022 走看看