1

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

问题是我不是要获取 Guid,而是要获取 User_ID,这是我在名为 Users 的自定义表上拥有的字段。在该表上,我有作为 PK 的 User_ID 和作为来自表 aspnet_Users 的 FK 的 UserId。

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

因此,通过 (1,2,3) 的 ID 检查用户是否具有 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,该用户 ID 位于我的自定义表用户中。

谢谢您的帮助

4

5 回答 5

1

登录到您的应用程序后,您应该将用户标识维护到会话变量中......以便稍后您可以直接使用它。

例子:-

    //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"]);
于 2013-05-22T11:48:56.577 回答
0

如果我理解正确,您有一个自定义表Users,其中包含 PKUser_ID和一个UserId作为表 aspnet_Users 的 FK 的列。

您已经知道登录用户的用户名,所以为什么不简单地执行以下操作:

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。

于 2013-05-22T12:00:09.977 回答
0

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

我只想对所有回复表示感谢,并将解决方案留给我自己的问题。基本上我做错的是选择命令。我不太擅长 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");
} 

再次感谢大家的耐心和帮助

于 2013-05-24T11:25:02.450 回答
0

假设您说 using 已登录

使用User.Identity.Name.

您检查用户是否通过以下方式进行身份验证:

User.Identity.IsAuthenticated

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

com.Paramaters.AddWithValue("@User_ID",  User.Identity.Name);
于 2013-05-22T11:34:32.273 回答
0

如果你正在使用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时没有使用那么。loginuseridusername

注意:确保您具有唯一性,username否则它将为您提供多个userid.

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

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

希望它有效..

于 2013-05-22T11:48:47.340 回答