【问题标题】:How to use the data of one table in the database of the other table如何在另一张表的数据库中使用一张表的数据
【发布时间】:2016-04-09 12:24:57
【问题描述】:

我的数据库中有 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();

当我在此查询中使用用户名时,用户的所有注销时间都会更改为上次注销时间。

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

【问题讨论】:

  • 您的表 logindata 遗漏了一条重要信息。您需要在您创建的任何新记录中存储一个唯一的 SessionID 来标识您的用户的会话。然后,当您需要编写注销信息时,您应该使用该 SessionID 在您的表中标识该用户会话的唯一记录

标签: c# sql asp.net database


【解决方案1】:

这段代码:

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 的比较。

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

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

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

【讨论】:

  • 那么我究竟如何使用 logindata 表中用户详细信息表中的 guID。请帮助我,因为我是新手。我必须提交这个项目。
  • 如果要在logindata 表中通过ID 查找用户,则需要从idd 中提取ID 并将其放入strQuery。但是我不确定我是否正确理解使用该 guiID
【解决方案2】:

由于您在注销详细信息表中为每个用户保留多条记录,因此您应该指定一种方法来更新所选记录,方法是添加新字段(例如会话 ID),或者您可以使用现有的登录时间。请参阅下面的示例更新。

// 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();

【讨论】:

  • 不会更改同时登录的所有用户的注销时间吗?
  • 否 该查询在 Where 子句中有两个条件,一个用于 UserName,一个用于 LoginTime,因此如果您不允许同一用户同时存在多条记录,则只会更新一条记录。
  • 你能告诉我如何更新 LoginTime 变量来保存登录时间。因为我是新手,所以我不知道这意味着什么。
  • 在您的代码中,您在注销详细信息表中的哪个位置保存了新记录?在这个地方,您假设将当前数据和时间保存为“LoginTime”字段。您可以将此值保存在会话变量中,例如 Session["LoginTime"]。然后在我上面的代码中,您可以使第二行像这样 LoginTime = Session["LoginTime"]。就是这样。
  • 这是我的登录表单代码。请查看并告诉我。请感谢imgur.com/uElwBxF
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2013-09-29
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多