1

我正在尝试以下代码

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();
        }
 }

我在 userid 中获得的值与我在数据库中获得的值不同。我究竟做错了什么。我试过MembershipUser user = Membership.GetUser()了,但它返回 null

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

编辑: 数据库中的用户 ID:161863BC7C244AADBF27F5F6250AF99C

用户 ID var 中的用户 ID:bc631816-247c-ad4a-bf27-f5f6250af99c

4

1 回答 1

2

正如我在评论中提到的,似乎Oracle是以不同的顺序存储用户 guid。如果您真的想在数据库中获得相同的 guid,则需要一种解决方法。检查此代码项目文章。作者使用了一种方法来翻译 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; 
    } 

虽然这是未经测试的。作者说

创建了以下方法,为我解决了这个问题

于 2013-02-10T14:35:54.317 回答