我希望能够获取在我的网站上登录的当前用户的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。
感谢您的帮助
答案 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
username
时username
使用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");
}
再次感谢所有的耐心和帮助 保重