无法检索Microsoft Access自动编号值

时间:2013-03-25 18:24:00

标签: c# sql-server ms-access

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

通常,这样做的方式是:

  1. 创建新的登录记录。
  2. 通过运行新的选择来获取其自动生成的记录ID,该新选择要求该特定用户的最新登录条目。您可以按降序排序以确保它是记录集中的第一条记录。
  3. 使用该记录ID来指定要使用WHERE ID = ?更新的登录记录,并使用记录ID填写ID值。
  4. 当您不知道自动生成的主记录ID是什么时,这是创建数据库记录的一种非常典型的模式。您创建新记录,在记录ID中读回它以获取其自动生成的主键ID值,然后使用记录ID来引用它。