如何从自定义表中获取UserID

本文关键字:获取 UserID 自定义 | 更新日期: 2023-09-27 18:14:54

我希望能够获得当前用户登录我的网站的ID。

的事情是,我没有试图得到Guid,但User_ID,这是一个字段,我有一个自定义表的我叫用户。在这个表中,我有User_ID,它是PK, UserId是来自表aspnet_Users的FK。

我想要这个字段的原因是因为我有一个表购买,每次一个用户登录按下按钮说(购买),一个新的saleId增加和User_ID购买它。在我的表Users上,User_ID是int类型,从1开始,并且每次在站点上注册新用户时都增加。

因此,通过ID(1,2,3)来检查用户比使用30个字符的唯一标识符

更容易

我的想法是这样的:

protected void Button1_Click(object sender, EventArgs e)        
{
    string InsertSql = "INSERT INTO [Purchase] (User_ID) VALUES (@User_ID)";
            using (Connection)
            {
                Connection.Open();
                SqlCommand com = new SqlCommand(InsertSql, Connection);
                com.Paramaters.AddWithValue("@User_ID",  ????);
                com.ExecuteNonQuery();
                cn.Close(); 
             }
} 

????在哪里我需要以某种方式获得当前用户登录的User_ID,这是在我的自定义表用户。

Thanks for the help

如何从自定义表中获取UserID

登录到您的应用程序后,您应该维护userid到会话变量。这样以后你就可以直接使用了

: -

    //while user logged-in,push userid into session variable:-
    Session["userid"] = 12;
    //And later on in oyur page you can use it like :-
   com.Paramaters.AddWithValue("@User_ID",  (int)Session["userid"]);

假设使用已登录

使用User.Identity.Name

检查用户是否通过认证:

User.Identity.IsAuthenticated

它将为您提供asp.net应用程序中当前登录用户的名称。

com.Paramaters.AddWithValue("@User_ID",  User.Identity.Name);

如果我理解正确,您有一个自定义表Users,其中PK User_ID和列UserId是表aspnet_Users的FK。

您已经知道了登录用户的UserName,那么为什么不简单地执行如下操作:

string InsertSql = @"
    INSERT INTO [Purchase] (User_ID)
    SELECT U.User_ID FROM Users U
    INNER JOIN aspnet_Users AU ON U.UserId = AU.UserId
    WHERE AU.LoweredUserName = LCASE(@UserName)
     ";

您的@UserName参数是您已经知道的当前登录用户的名称(HttpContext.Current.User.Name),并且您不需要知道User_ID。

如果使用Membership,则

如果已验证,则获取名称。

if (User.Identity.IsAuthenticated)
    Label1.Text = HttpContext.Current.User.Identity.Name;
else
    Label1.Text = "No user identity available.";

如果您想获得userid,那么运行select查询,如

Select userid from tablename where username = 'pass here username';

通过运行此查询,您将获得userid,并在需要时使用该userid

参数化查询:

com.Paramaters.AddWithValue("@User_ID",  HttpContext.Current.User.Identity.Name);

,如果你没有使用Membership,那么在login的时候,从你的username中获得userid,并使用任何你想要的地方。

注意:确保你有唯一的username,否则它会给你多个userid

逻辑2:使用MembershipUser对象的ProviderUserKey成员,像这样:

MembershipUser user = Membership.GetUser();
string userid = user.ProviderUserKey.ToString();

我终于做到了,我有点转移到我需要在我的网站上做的其他事情,所以我今天才弄清楚。

我只是想感谢所有的回复,把解决方案留给我自己的问题。基本上我做错的是选择命令。我不是很擅长SQL,所以我不知道应该把它放在xD,但现在我知道了。

protected void Button1_Click(对象发送者,EventArgs e)

{

    MembershipUser usr =  Membership.GetUser(HttpContext.Current.User.Identity.Name);
    Guid usrid = (Guid)usr.ProviderUserKey;
    String product= DropDownList1.SelectedValue.ToString();
    string InsertSql= "INSERT INTO [Purchase] (Product_ID, User_ID) VALUES (@Product_ID,(SELECT User_ID from [Users] where UserId = @UserId))";

        using (Connection)
        {
            Connection.Open();
            SqlCommand com = new SqlCommand(InsertSql, Connection);
            com.Parameters.AddWithValue("@Product_ID", product);
            com.Parameters.AddWithValue("@UserId", usrid);
            com.ExecuteNonQuery();
            Connection.Close();
        }
    Response.Redirect("Purchase.aspx");
} 
再次感谢所有的耐心和帮助照顾