2008-12-30 56 views
3

所以我有一个第三方应用程序,我必须连接,这个应用程序需要我的用户表中的用户ID。问题是我将我的用户ID存储为GUID,第三方应用只接受一个整数。所以我认为,如果有一种方法可以将GUID转换为整数,那么可以将其转换回来(因为我从他们的服务器获取有关用户ID的通信),那么我不必重新编码太多。有任何想法吗?将GUID转换为整数和返回

回答

8

你需要一个库从GUID到第三方的整数的映射:无论是新的“INT thirdPartyId”在现有的用户表中的字段,或一个新表。

2

Guid比整数大得多,并且不能放入整数。

4

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

您也可以将您的GetHashCode()方法来获得一个整数,而是两个不同的GUID可能具有相同的散列码,因为有更多可能的GUID超过32位整数。

8

的整数使用32位,而GUID是128位 - 因此,有没有办法为GUID转换为整数而不丢失信息,所以你可以把它转换回来。

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

+2

整数的大小取决于系统。 – 2008-12-30 21:04:38

+0

但是,然后,你限制自己2^32 ID。 – LeppyR64 2008-12-30 21:04:44

0

添加整数标识列,基本上是第二个ID列,并将该列ID赋予应用程序。

0

创建一个新的表(MyUserMappings)具有两列

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

2)MyUserID(GUID,NOTNULL)

插入做

INSERT INTO MyUserMappings(MyUserID) SELECT MyGUIDUserID FROM MyUsers所有GUID从用户名到该表

您还需要在MyUsers表上放置一个触发器,以便每当MyUsers表获取新行时,都会在MyUsersMappings表中插入一个新行。

现在创建一个视图,显示从您的MyUsermappingsTable您MyUsers表和第三方用户ID字段中的所有领域。

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

干杯。