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();
答案 0 :(得分:2)
如果您在用户点击“退出”按钮时执行SELECT @@IDENTITY
查询,您将无法获得您希望获得的值。 SELECT @@IDENTITY
旨在在创建记录的INSERT
之后立即调用(在这种情况下,当用户在中记录时)。然后,您可以在应用程序中存储该值,并在用户注销时使用它来选择相同的记录。
如果您的应用程序插入任何其他记录(在其他表中)导致创建新标识(也称为“自动编号”)值,则SELECT @@IDENTITY
将返回最新的那些价值观。因此,只需在用户登录时获取@@IDENTITY
值,并在用户再次注销时保存该值。
答案 1 :(得分:0)
通常,这样做的方式是:
WHERE ID = ?
更新的登录记录,并使用记录ID填写ID值。当您不知道自动生成的主记录ID是什么时,这是创建数据库记录的一种非常典型的模式。您创建新记录,在记录ID中读回它以获取其自动生成的主键ID值,然后使用记录ID来引用它。