将GUID转换为整数和后退

时间:2008-12-30 20:56:53

标签: .net asp.net

所以我有一个第三方应用程序,我必须与之接口,此应用程序需要来自我的users表的userID。问题是我将我的userID存储为GUID,第三方应用程序只接受整数。所以我想,如果有一种方法可以将GUID转换为整数然后能够将其转换回来(因为我从他们的服务器获得有关userID的通信),那么我不必重新编码太多。任何想法?

6 个答案:

答案 0 :(得分:8)

整数使用32位,而GUID是128位 - 因此,没有办法将GUID转换为整数而不会丢失信息,因此无法将其转换回来。

编辑:你可以将GUID存储到GUID表中,在表中为每个表分配一个唯一的整数ID。这样,您可以在给定整数ID的情况下获取GUID。

答案 1 :(得分:8)

您需要一个商店从您的指南到第三方整数的映射:现有用户表中的新“int third Party Id”字段或新表。

答案 2 :(得分:4)

您需要一个128位整数类型来保存GUID的等价物。您可以使用Guid的ToByteArray()方法来获取字节和接受字节数组的构造函数来恢复Guid。

您也可以使用GetHashCode()方法获取整数,但是两个不同的GUID可能具有相同的哈希码,因为有更多可能的Guids而不是32位整数。

答案 3 :(得分:2)

比整数大得多的Guid,不能整数。

答案 4 :(得分:0)

添加整数标识列,它基本上是第二个ID列,并将该columnID提供给应用程序。

答案 5 :(得分:0)

创建一个包含两列的新表(MyUserMappings)

1)ThirdPartyUserID(INT,NOT NULL,IDENTITY(1,1))

2)MyUserID(GUID,NOTNULL)

通过执行

将所有GUID从您的UserID插入此表

INSERT INTO MyUserMappings(MyUserID) 从MyUsers中选择MyGUIDUserID

每次MyUsers表获取新行时,您还需要在MyUsers Table上设置一个触发器,以在MyUsersMappings表中插入一个新行。

现在创建一个视图,显示MyUsermappingsTable中MyUsers Table和ThirdParty UserID字段中的所有字段。

现在,您不需要对现有应用程序进行任何DAL更改,并且原始表格不受影响。因此,您现有的应用程序将保持不变。并且您的新代码可以查询视图而不是表来返回整数ID和所有其他用户信息。

干杯。

相关问题