C# 是否每天提示用户超时一次?

C# 是否每天提示用户超时一次?,c#,ms-access,insert,C#,Ms Access,Insert,我正在开发一个考勤管理系统,我希望它能提示用户每天一次考勤。我的想法是,它将从数据库中选择employeeID和Indate、intime和out time,如果Indate和intime有值,它将以每天一次的形式显示时间,与超时选择Indate、outtime等内容完全相同。这是我的代码 private void button1_Click(object sender, EventArgs e) { try { //VAL

我正在开发一个考勤管理系统,我希望它能提示用户每天一次考勤。我的想法是,它将从数据库中选择employeeID和Indate、intime和out time,如果Indate和intime有值,它将以每天一次的形式显示时间,与超时选择Indate、outtime等内容完全相同。这是我的代码

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            //VALIDATION
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = @"    SELECT EmployeeID, Firstname, Lastname
                                        FROM tblEmployee 
                                        WHERE EmployeeID = @1";
            command.Parameters.AddWithValue("@1", textBox1.Text);
            reader = command.ExecuteReader();

            if (reader.Read())
            {

                    dataGridView1.Rows[0].Cells[0].Value = reader[0].ToString();
                    dataGridView1.Rows[0].Cells[1].Value = reader[1].ToString();
                    dataGridView1.Rows[0].Cells[2].Value = reader[2].ToString();
                    dataGridView1.Rows[0].Cells[3].Value = dateTimePicker1.Value.ToString();
                    savetimein();


            }

            else
            {
                MessageBox.Show("No Employee ID");
            }
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    //SAVE TO DATABASE
    private void savetimein()
    {

        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = "INSERT INTO [TimeinTimeout](EmployeeID, Firstname, Lastname, InDate, InTime) VALUES (@1,@2,@3,@4,@5)";
        command.Parameters.Clear();
        command.Parameters.AddWithValue("@1", textBox1.Text);
        command.Parameters.AddWithValue("@2", dataGridView1.Rows[0].Cells[1].Value);
        command.Parameters.AddWithValue("@3", dataGridView1.Rows[0].Cells[2].Value);
        command.Parameters.AddWithValue("@4", DateTime.Now.ToShortDateString());
        command.Parameters.AddWithValue("@5", DateTime.Now.ToLongTimeString());
        command.ExecuteNonQuery();
        MessageBox.Show("Data Saved!");
        this.Hide();
        Form1 Mm = new Form1();
        Mm.ShowDialog();

    }

您应该检查您的表以了解用户的最后登录日期。我将假设InDate列和InTime列分别是日期列和时间列,或者至少如果不是,则以合理的可排序方式存储日期和时间,例如YYYY-MM-DD,并使用24小时时钟作为时间-如果不是,则需要确定如何进行排序。如果要检查最近24小时的SQL查询,则该查询将如下所示:

SELECT InDate, InTime 
FROM [TimeinTimeout] 
WHERE EmployeeID = @p1 
ORDER BY InDate DESC, InTime DESC
然后,您将使用OleDbDataReader读取该列的结果(如果有),如果没有,则表示您知道他们从未登录过,如果这些列可为空,则检查是否为空,以及检查InDate和InTime是否在24小时之前,等等

如果您只想检查他们今天是否登录,那么简单一点:

SELECT InDate 
FROM [TimeinTimeout] 
WHERE EmployeeID = @p1 
ORDER BY InDate DESC
您可以使用ExecuteScalar,检查null,如果不为null,则检查日期是否为今天的日期


还要记住,您不仅需要检查C中的null,还需要检查返回值是否不==DBNull.Value,这与C中的null不同。

您在哪里查询他们上次登录的时间?你似乎知道你必须做什么-你的问题是什么?我正在考虑限制用户的登录,但我想知道的是,如果某个列有值,设置的代码是什么,比如说,如果数据库列没有值,它将异常,但如果它有值,它将不会。实际上,我没有想到其他东西,从TimeinTimeout中选择EmployeeID、InDate、InTime,其中EmployeeID=@1;ifreader[3]==null{//save to database}else{MessageBox.ShowTime每天一次;这样行吗?我只是一个C程序新手,你需要那里的命令来保证你得到的是最新的数据-如果用户在该表中有多行,你可能总是返回最早的一行,或者返回最新的一行以外的其他行。。。