C# 如何在另一个表的数据库中使用一个表的数据

C# 如何在另一个表的数据库中使用一个表的数据,c#,sql,asp.net,database,C#,Sql,Asp.net,Database,我的数据库中有两个表,一个用于生成GUID的用户详细信息,另一个用于登录详细信息。如何获取此查询中用户的GUID SqlConnection conlog = new SqlConnection(ConfigurationManager.ConnectionStrings["loginConnectionString"].ConnectionString); conlog.Open(); Session["New"] = null; string idQ

我的数据库中有两个表,一个用于生成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();
当我在这个查询中使用用户名时,用户的所有注销时间都会更改为上次注销时间

这是注销详细信息的屏幕截图:

这段代码:

update logindata
set LogoutTime=NEW_DATE
where UserName=USER_NAME;
说明:对于用户名等于USER_NAME的每个记录,将LogoutTime设置为NEW_DATE

但是,您只想更新单个记录,因此需要标识特定的登录详细信息。最简单的解决方案是添加带有SessionId/LoginId等的列,并将查询更改为:

update logindata
set LogoutTime=NEW_DATE
where SessionId=SESSION_ID and UserName=USER_NAME;
如果您可以保证SessionId是唯一的,那么您可以使用UserName删除comparison

另一种解决方案是仅使用最新登录时间更新记录,例如:

update logindata
set LogoutTime=NEW_DATE
order by LoginTime desc
limit 1;

您不需要以这种方式添加新列。

因为您在注销详细信息表中为每个用户保留了多条记录,所以您应该指定一种只通过添加新字段(如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();

您的表logindata遗漏了一条重要信息。您需要在创建的任何新记录中存储一个唯一的SessionID,用于标识用户的会话。然后,当您需要写入注销信息时,您应该使用该SessionID在表中标识该用户会话的唯一记录。因此,我应该如何准确地使用logindata表中用户详细信息表中的guID。。我是新手,请帮帮我。。如果你想在
loginda
表中按ID查找用户,那么你需要从
idd
中提取ID并将其放入
strQuery
。但是,我不确定我是否理解并正确使用该guID。它是否会更改所有同时登录的用户的注销时间。?否查询在Where子句中有两个条件,一个用于用户名,一个用于登录时间,因此只会更新一条记录,前提是您不允许同一用户在同一时间有多条记录。您可以吗告诉我如何更新LoginTime变量以保留登录时间。由于我是新手,我不知道这意味着什么。在您的代码中,您在注销详细信息表中的何处保存了一条新记录?在这里,您假设将当前数据和时间保存为字段“LoginTime”。您可以将此值保存在会话变量中,如session[“LoginTime”]。然后,在我上面的代码中,您可以创建第二行,如LoginTime=Session[“LoginTime”]。就这些。这是我的登录表代码。请查看并告诉我。谢谢