2013-02-10 70 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