2008-12-30 135 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和所有其他用戶信息。

乾杯。