如何从自定义表中获取UserID

时间:2013-05-22 11:32:12

标签: c# asp.net sql

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

问题是我不是想要获取Guid,而是User_ID,这是我在我自己的一个名为Users的自定义表上的字段。在该表上,我有User_ID,它是PK和UserId,它是表aspnet_Users中的FK。

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

因此,通过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。

感谢您的帮助

5 个答案:

答案 0 :(得分:1)

登录到您的应用程序后,您应该将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"]);

答案 1 :(得分:0)

假设您说使用已登录

使用User.Identity.Name

使用以下方法检查用户是否已通过身份验证:

User.Identity.IsAuthenticated

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

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

答案 2 :(得分: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,那么在login userid usernameusername使用userid并使用您想要的地方。

注意:请确保您拥有唯一的ProviderUserKey,否则会为您提供多个MembershipUser

逻辑2: 使用MembershipUser user = Membership.GetUser(); string userid = user.ProviderUserKey.ToString(); 对象的{{1}}成员,如下所示:

{{1}}

希望它有效..

答案 3 :(得分:0)

如果我理解正确,你有一个自定义表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。

答案 4 :(得分:0)

我终于做到了,我有点转向我需要在我的网站上做的其他事情,所以我今天才想出来。

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

protected void Button1_Click(object sender,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");
} 

再次感谢所有的耐心和帮助 保重