2013-02-10 66 views
1

我想下面的代碼ProviderUserKey返回錯鍵

ASPX:

Username: <br /> 
<asp:TextBox runat="server" ID="txtUserName"></asp:TextBox> 
<br /> 
Password: <br /> 
<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox> 
<br /> 
<asp:Button runat="server" ID="btnLogin" Text="Login" onclick="btnLogin_Click"/> 

後面的代碼:

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    if(!string.IsNullOrEmpty(txtUserName.Text.Trim()) && !string.IsNullOrEmpty(txtPassword.Text.Trim())) 
    { 
     string username = txtUserName.Text.Trim(); 
     string password = txtPassword.Text.Trim(); 
     if (Membership.ValidateUser(username, password)) 
     { 
      MembershipUser user = Membership.GetUser(username); 
      string userid = user.ProviderUserKey.ToString(); 
     } 
} 

我在用戶標識中得到的值是什麼,我有不同數據庫。我究竟做錯了什麼。我已嘗試MembershipUser user = Membership.GetUser(),但它返回空

注意: 我正在使用配置了asp.net成員資格的Oracle。

編輯: 用戶ID在數據庫:161863BC7C244AADBF27F5F6250AF99C

用戶ID在用戶ID VAR:bc631816-247c-ad4a-bf27-f5f6250af99c

+1

我認爲它是與存儲數據的方式甲骨文。檢查[這個答案](http://stackoverflow.com/a/5447244/799558) – AbZy 2013-02-10 14:27:06

+0

謝謝,我想這就是原因。 – ZedBee 2013-02-10 14:31:43

回答

2

正如我在我的評論中提到,好像Oracle存儲用戶指導順序不同。如果你真的想在數據庫中獲得相同的GUID,你需要一個解決方法。檢查this code project article。筆者使用的方法翻譯的GUID:

public static string TranslateOraceEndianUserID() 
    { 
     MembershipUser myObject = Membership.GetUser(); 
     Guid g = new Guid(myObject.ProviderUserKey.ToString()); 
     byte[] b = g.ToByteArray(); 
     string UserID = BitConverter.ToString(b, 0).Replace("-", string.Empty); 
     return UserID; 
    } 

這是未經測試,但。作者說

以下的方法創建瞭解決此問題對於我來說

+0

和這解決了我的問題http://stackoverflow.com/a/7245900/1099235 – ZedBee 2013-02-10 14:45:53

+0

@ZedBee回答者是文章的同一作者:)。我沒有注意到我之前給你的鏈接 – AbZy 2013-02-10 14:48:07

+0

:)中的答案現在陷入了另一個問題。由於我將用戶標識保存到我的一個表格中,直接保存用戶標識就會出現問題。想知道我是否應該將其轉換回oracle格式。 – ZedBee 2013-02-10 14:58:48