0

访问 2003

VS 2010 C#

正如主题标题所说,我对此有疑问。它正在创建一个新字段来打印日期和时间,它应该在当前 ID 中标记日期和时间。我也尝试过 UPDATE 命令参数但没有成功。

我有一种不同的方法(btnloggedIn),它可以保存用户名、登录日期和登录时间。这可以正常工作。我创建了另一种我遇到问题的方法 (btnLoggedOut)。目的是保存用户注销时的注销日期和注销时间,在登录时创建自动 ID 的 Access 的来列中。

表名 - LoginTable

>

FieldName   Data Type
UserName    Text
Password    Text

表名 - LoginLogTable

 FieldName     Data Type

 ID            AutoNumber
 UserName      Text
 LoggedInDate  Date/Time
 LoggedInTime  Date/Time
 LoggedOutDate Date/Time
 LoggedOutTime Date/Time  

ID是PK。它的一对多关系。登录的用户可以有许多关于日期和时间详细信息的详细信息

如果有人可以在这里帮助我,我将不胜感激。

 private void btnLogOut_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

       cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = ?, [LoggedOutTime] = ?  
       WHERE ID = ?";

        cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
        cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
            Close();
   }

这是 btnLogin 方法的部分代码...

 OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)";

        cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
        cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString());
        cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm"));
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();
4

2 回答 2

2

SELECT @@IDENTITY如果您在用户单击“注销”按钮时执行查询,您可能不会得到您希望的值。SELECT @@IDENTITY旨在在INSERT创建记录之后立即调用(在这种情况下,当用户登录)。然后,您可以将该值隐藏在您的应用程序中,并在用户注销时使用它来选择相同的记录。

如果您的应用程序插入任何其他记录(在其他表中)导致创建新的身份(也称为“自动编号”)值,那么将返回这些SELECT @@IDENTITY值中的最新值。因此,只需在用户登录时获取该值并将其保存以供用户再次注销时使用。@@IDENTITY

于 2013-03-25T19:58:45.150 回答
0

通常,这样做的方式是:

  1. 创建新的登录记录。
  2. 通过运行一个新的选择来获取其自动生成的记录 ID,该选择要求该特定用户的最新登录条目。您可以降序排序以保证它是记录集中的第一条记录。
  3. 使用该记录 ID 来指定您想要更新的登录记录,WHERE ID = ?并使用记录 ID 填写 ID 值。

当您不知道自动生成的主记录 ID 是什么时,这是一种非常典型的数据库记录创建模式。您创建新记录,在记录 ID 中读回它以获取其自动生成的主键 ID 值,然后从那时起使用记录 ID 来引用它。

于 2013-03-25T18:55:24.983 回答