当前位置: 首页 > 编程日记 > 正文

C#中使用GUID

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 基础结构。
Guid 结构的常用法包括:
1) Guid.NewGUID()
生成一个新的 GUID 唯一值
2) Guid.ToString()
将 GUID 值转换成字符串,便于处理
3)构造函数 Guid(string)
由 string 生成 Guid 结构,其中string 可以为大写,也可以为小写,可以包含两端的定界符“{}”或“()”,甚至可以省略中间的“-”,Guid 结构的构造函数有很多,其它构造用法并不常用。

.NET Framework 中可以使用类 GuidConverter 提供将 Guid 结构与各种其他表示形式相互转换的类型转换器。

在C#中生成一个GUID

处理一个唯一标识符使得存储和获得信息变得更加容易。在处理一个数据库中这一功能变得尤其有用,因为一个GUID能够操作一个主键。

同样,SQL Server也很好地集成了GUID的用途。SQL Server数据类型uniqueidentifier能够存储一个GUID数值。你可以通过使用NEWID()函数在SQL Server中生成这一数值,或者可以在SQL Server之外生成GUID,然后再手动地插入这一数值。

在.NET中,后面一种方法显得更加直接。.NET Framework中的基本System类包括GUID数值类型。除此之外,这一数值类型包含了处理GUID数值的方法。特别地,NewGUID方法允许你很容易地生成一个新的GUID。

ContractedBlock.gifExpandedBlockStart.gifCode
 1using System; 
 2namespace DisplayGUID
 3ExpandedBlockStart.gifContractedBlock.gif{
 4    class Program
 5ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 6        static void Main(string[] args)
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 8            GenerateGUID();
 9        }

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

14    }

15}

下面为这一程序的输出:(虽然不同系统之间的GUID是变化的。)

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

以上范例使用到System.Guid空间名称的NewGuid函数来返回一个数值。在这一点上,你可以看到GUID是一个很好的功能,但在程序的什么地方使用到它们,并如何使用它们?

在程序中使用一个GUID

一个GUID可以在后台数据库中操作一个主键。以下代码使用一个GUID在一个后台数据库中存储信息,这一数据库包含以下的列:

pk_guid  —uniqueidentifier  数据类型
name      —nvarchar  数据类型
这样出现一个包含文本框的简单Windows窗体。当选择按钮时,文本框中的数据被插入到数据库中name列。通过程序代码可以生成一个GUID并存储在pk_guid列中:

ContractedBlock.gifExpandedBlockStart.gifCode
 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
12ExpandedBlockStart.gifContractedBlock.gif{
13    public partial class Form1 : Form
14ExpandedSubBlockStart.gifContractedSubBlock.gif    {
15        public Form1()
16ExpandedSubBlockStart.gifContractedSubBlock.gif        {
17            InitializeComponent();
18        }

19
20        private void btnInsert_Click(object sender, EventArgs e)
21ExpandedSubBlockStart.gifContractedSubBlock.gif        {
22            string _str = "server=(local);Initial Catalog=TestGuid;Integrated Security=SSPI";
23            using (SqlConnection conn = new SqlConnection(_str))
24ExpandedSubBlockStart.gifContractedSubBlock.gif            {
25                try
26ExpandedSubBlockStart.gifContractedSubBlock.gif                {
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)
33ExpandedSubBlockStart.gifContractedSubBlock.gif                {
34                    System.Console.Write("Error: " + ex.Message);
35                }

36            }

37        }

38    }

39
40}


另一个GUID程序将一个唯一的标识符分配给一个.NET类或者接口,也就是说,GUID作为一个属性被分配给类或者接口。可以使用标准属性语法来实现这一过程: 本

我们可以扩展第一个范例来分配一个GUID。System.Runtime.InteropServices空间名称必须被引用来使用GUID属性。以下C#代码实现了这一过程:

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

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

20    }

21}


GUID永远是方便的
对于程序开发的各个方面,.NET Framework简化了建立和处理GUID数值的过程。在.NET程序需要的地方,这一功能很容易地生成唯一的数值。

转载于:https://www.cnblogs.com/dongqi/archive/2008/10/13/1310128.html

相关文章:

Matlab与线性代数 -- 对角矩阵

本微信图文详细介绍了Matlab中diag()函数的应用。

leetcode--对称二叉树--python

文章目录题目题目详情示例说明解题代码代码运行结果体会题目 题目详情 给定一个二叉树,检查它是否是镜像对称的。 示例 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1…

IPV6的设置问题!

最近一段在研究IPV6,在网上搜了好多资料,但是感觉大部分都不实在,都是泛泛而谈,实用性不强,故决定做点什么!正所谓该出手时就出手,风风火火闯九州哦~~ IPV6设置步骤: 1.首先查看你时…

Matlab与线性代数 -- 数组与矩阵的乘幂

本微信图文详细介绍了数组的乘幂运算power()与矩阵的乘幂运算mpower()。

Docker 公司是如何做社区的?

今天看了一个Docker公司是如何做社区的PPT,演讲者是Docker公司的市场部老大。Docker从发布之初就受到了开发者的关注,1.0版本发布的时候Docker就收到了超过460位贡献者的8741条改进建议,Docker也承认是社区帮助他们迅速达到了这一新的里程碑。…

leetcode--整数反转--python

文章目录题目题目详情示例注意解题代码小知识代码运行结果体会题目 题目详情 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 输入: 123 输出: 321输入: -123 输出: -321输入: 120 输出: 21注意 假设我们的环境只能存储得下 32 位…

水晶报表调用存储过程的问题

前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的:ERP软件里有很多的数据表,有些报表的字段要从多个数据表里取数据,并且要对数据进行处理,来作为报表的字段,我看了些资料,说…

iOS-ARC_Xcode检测循环引用

iOS-ARC_Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.NSMutableArray *firstArr…

什么是SESSION?(三)

本微信图文通过一个利用数据库的方式存储Session的例子,深入介绍了对Session机制的理解。本微信图文由钟锦提供。

leetcode--回文数--python

文章目录题目题目详情示例解题代码代码运行结果体会题目 题目详情 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 输入: 121 输出: true输入: -121 输出: false 解释: 从左向右…

DevXpress 控件: 第一篇: 将 Master_Details 关系进行到底--XtraPivotGridControl控件

一. 控件说明: XtraPivotGridControl;数据控件 二. 控件特点: 1. 支持行, 列字段拖动, 对调 支持行, 列字段的添加, 移除 支持数据字段的添加, 移除, 对调 2. 支持以行, 列字段排序 支持以过滤字段排序 3. 支持行, 列字段过滤 …

JNI与NDK学习第二篇-----应用篇

2019独角兽企业重金招聘Python工程师标准>>> 1.安装配置NDK 1). 解压NDK的zip包到非中文目录(最好英文目录不要带空格) 2). 配置path : 解压后NDK的根目录----->ndk-build 2.给AS关联NDK 1). local.properties中添加配置 ndk.dirE\:\\Android\\sdk\\android-…

数据结构与算法课程的代码链接

VS2005版本 http://download.csdn.net/detail/lsgo_myp/9713329 VS2015版本 http://download.csdn.net/detail/lsgo_myp/9730592

leetcode--字符串转换为整数--python

文章目录题目题目详情说明示例解题代码思路代码运行结果最佳方案题目 题目详情 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的…

什么是自组织特征映射网络?

什么是自组织特征映射网络?

理解jQuery对象$.html

如果要比喻jQuery和原生javascript的关系,我个人认为是自动档和手动档汽车的区别。使用原生javascript,可以知道离合器以及档位的作用;而使用jQuery,则把离合器和手动档位封装到函数,直接前进、后退或驻车即可。所以&a…

精通ASP.NET中弹出窗口技术

本文讨论如何以ASP.NET中的CodeBehind方式实现各种弹出窗口,实现与弹出窗口的交互。并探讨常用非标准IE浏览器对弹出的窗口的各种过滤行为及使用弹出窗口相应对策,以期给出使用弹出窗口的一个通用较优方案。 关键词:ASP.NET、CodeBehind、过滤…

leetcode--删除排序数组中的重复项--python

文章目录题目题目详情示例说明解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改…

转换人民币大小金额

1 usingSystem; 2 3 namespaceTest 4 { 5 /**////<summary>6 ///Rmb 的摘要说明。 7 ///</summary>8 publicclassRmb 9 { 10 /**////<summary>11 ///转换人民币大小金额 12 ///</summary>13 ///<param name"num">金额</param>14…

偏执却管用的 10 条 Java 编程技巧

经过一段时间的编码&#xff08;咦&#xff0c;我已经经历了将近20年的编程生涯&#xff0c;快乐的日子总是过得很快&#xff09;&#xff0c;我们开始感谢那些好习惯。因为&#xff0c;你知道… “任何可能出错的事情&#xff0c;最后都会出错。” 这就是人们为什么喜欢进行“…

如何利用SOM网络进行柴油机故障诊断

如何利用SOM网络进行柴油机故障诊断

leetcode--删除排序链表中的重复元素--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 输入: 1->1->2 输出: 1->2输入: 1->1->2->3->3 输出: 1->2->3解题代码 …

如何使用 UserAccountControl 标志操纵用户帐户属性

转载&#xff1a; http://support.microsoft.com/kb/305144 概要 在打开用户帐户的属性后&#xff0c;单击帐户选项卡&#xff0c;然后选中或清除“帐户选项”对话框中的复选框&#xff0c;则会将数值分配给 UserAccountControl 属性。分配给该属性的值通知 Windows 已启用了哪…

程序员 专属的新年祝福原来是这样的! (附中奖名单)

程序员的新年祝福会是什么样的&#xff1f;我们共收到了97位 OSCer 的回复&#xff0c;以下为支持数排名前十的祝福语&#xff1a; yale8848&#xff08;支持数&#xff1a;10&#xff09; document.write("") &#xff08;小编&#xff1a;捂脸&#xff0c;不过不知…

LSGO代码小组第16周复盘日志

LSGO代码小组第16周复盘日志&#xff0c;汇报人&#xff1a;高勇

leetcode--买股票的最佳时机II--python

文章目录题目题目详情注意示例代码思路解题代码运行结果最佳方案题目 题目详情 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。…

我的广州生活~

步入11月份&#xff0c;天气逐渐转冷&#xff01;本以为广东的冬天是永远的裤头T恤&#xff0c;看来我错了。。。在凉席上抗争了一周&#xff0c;我感冒了两次&#xff0c;看来人毕竟斗不过天&#xff0c;还是乖乖的铺上褥子&#xff0c;等待南国的冬天。他们都说广州的冬天是种…

苹果手表可以运行 ruby 脚本了

不得不佩服啊&#xff01; 各位看下载地址吧https://itunes.apple.com/cn/app/ruby-2.0-for-ios-yun-xing/id727047729?mt8https://yqfile.alicdn.com/d0403806fdff7411060f9b0b059d1f9966c19447.png" >https://yqfile.alicdn.com/5dbd9a02e4252465b9896713a592e092ca…

Matlab与线性代数--广义逆矩阵

本微信图文详细介绍了Matlab中求解广义逆矩阵的方法。

leetcode--无重复字符的最长子串--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长…