0

抛开盐和哈希辩论。并且请仅在您知道答案的情况下回复。

我正在尝试创建一种方法,在该方法中,用户输入其凭据,并在登录和注销时自动记录日期和时间。

我有两个问题

问题 1 - 我创建了一个简单的登录和注销方法。当我包含日期和时间代码时,我注意到这些是为所有用户记录和存储的。我目前有两个用户。因此,如果一个用户登录的日期和时间被记录下来并为另一个用户盖章。

问题 2 - 第二个问题是主题标题说,当 Update 命令参数与 Select 使用相同的方法时,我收到一条错误消息。

如果有人可以帮助我,我将不胜感激这两个问题。希望这只是一个小问题?如果省略日期和时间,那么如果有人可以帮助我进行多登录功能,我将不胜感激。

访问 2003 ~ 两个表。表 1 - 命名 LoginTable 表 2 - 命名 LoginLogTable

登录表

字段名数据类型

UserName   Text
Password   Text

LoginLogTable
FieldName     DataType
UserNameID    Text
UserName      Text
LoggedIn      Date/Time
LoggedInTime  Date/Time     



 private void btnLogin_Click(object sender, EventArgs e)
 {
    using (var command = myCon.CreateCommand())
        {
            command.CommandText = "select UserName, Password from LoginTable where WHERE STRCOMP(UserName, @UserName,0) = 0 AND STRCOMP(Password, @Password,0)=0";
           command.Parameters.AddWithValue("UserName", (txtUserName.Text));
            command.Parameters.AddWithValue("Password", (txtPassword.Text));
            myCon.Open();

            var reader = command.ExecuteReader();
            {
                if (reader.HasRows)
                {
                    MessageBox.Show("Login Successful");
                    Form2 frm = new Form2();
                    frm.Show();
                    while (reader.Read())
                    {
                      txtUserName.Text = reader["UserName"].ToString();
                      txtPassword.Text = reader["Password"].ToString();
                    }

                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = myCon;

                     cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ?";
                      cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString());
                    cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm"));
                    cmd.ExecuteNonQuery();
                    myCon.Close();

                }
            else MessageBox.Show("Login Falied");
            }

        }
           myCon.Close();
           myCon.Close();

}

4

2 回答 2

1

您的查询中没有任何条件update,因此它将更新表中的所有记录。添加条件以仅更新一条记录。我不知道你的桌子上有什么,但像这样:

cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? where UserName = ?";
cmd.Parameters.AddWithValue("LoggedInDate", DateTime.Now.ToShortDateString());
cmd.Parameters.AddWithValue("LoggedInTime", DateTime.Now.ToString("HH:mm"));
cmd.Parameters.AddWithValue("UserName", txtUserName.Text);

您应该在执行第二个命令之前关闭并处理第一个数据读取器和命令。

于 2013-03-24T18:45:25.530 回答
0

我想您在 LoginLogTable 中需要一个 UserName 列并更新类似这样的表

UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? WHERE UserName = 'YourUserName'.

其次,我相信您在这里不需要阅读器。您可以使用ExecuteScalar代替 Reader。第二个命令无法运行,因为 Reader 处于打开状态。

于 2013-03-24T18:43:25.007 回答