我的数据库中有2个表,一个用于生成GUID的用户详细信息,另一个用于登录详细信息。如何在此查询中获取用户的GUID
SqlConnection conlog = new SqlConnection(ConfigurationManager.ConnectionStrings["loginConnectionString"].ConnectionString);
conlog.Open();
Session["New"] = null;
string idQuery = "Select ID from [Table] where Username='"+Label1.Text+"'";
SqlCommand idd = new SqlCommand(idQuery, conlog);
string strQuery = "update logindata set LogoutTime='"+DateTime.Now+"' where UserName='"+Label1.Text+"' ";
SqlCommand cmd = new SqlCommand(strQuery, conlog);
DateTime.Now.ToString());
cmd.ExecuteNonQuery();
Response.Redirect("Loginform.aspx");
conlog.Close();
当我在此查询中使用用户名时,用户的所有注销时间都会更改为上次注销时间。
这是注销详细信息的屏幕截图:
答案 0 :(得分:0)
这段代码:
update logindata
set LogoutTime=NEW_DATE
where UserName=USER_NAME;
说:对于UserName等于USER_NAME的每条记录,将LogoutTime设置为NEW_DATE。
但是,您只想更新单个记录,因此需要确定特定的登录详细信息。最直接的解决方案是使用SessionId / LoginId等添加列,并将查询更改为:
update logindata
set LogoutTime=NEW_DATE
where SessionId=SESSION_ID and UserName=USER_NAME;
如果您可以保证SessionId是唯一的,那么您可以删除UserName的比较。
另一种解决方案是仅使用最新的LoginTime更新记录,例如:
update logindata
set LogoutTime=NEW_DATE
order by LoginTime desc
limit 1;
您无需以这种方式添加新列。
答案 1 :(得分:0)
由于您在注销详细信息表中保留了每个用户的多条记录,因此您应该指定一种方法来更新所选记录,方法是添加新字段说出(SessionID),或者您可以使用现有的登录时间。请参阅下面的示例更新。
// Uncomment next line and update LoginTime variable to hold your Login Time as you inserted in Login Tables upon user login.
// LoginTime =
SqlConnection conlog = new SqlConnection(ConfigurationManager.ConnectionStrings["loginConnectionString"].ConnectionString);
conlog.Open();
Session["New"] = null;
string idQuery = "Select ID from [Table] where Username='" + Label1.Text + "'";
SqlCommand idd = new SqlCommand(idQuery, conlog);
string strQuery = "update logindata set LogoutTime='" + DateTime.Now + "' where UserName='" + Label1.Text + "' AND LoginTime = '" + LoginTime + "'";
SqlCommand cmd = new SqlCommand(strQuery, conlog);
DateTime.Now.ToString());
cmd.ExecuteNonQuery();
Response.Redirect("Loginform.aspx");
conlog.Close();