每天一次提示用户进入时间/超时?

时间:2017-03-12 02:04:24

标签: c# insert access

我正在开发一个考勤管理系统,我希望它能提示用户每天进出一次。我想的是它将从数据库中选择employeeID和Indate,intime和out time,如果indate和intime有值,它将每天显示一次obly samethig thig w / timeout select 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();

    }

1 个答案:

答案 0 :(得分:0)

您应该在表格中查看用户的上次登录日期。 我将假设您的InDateInTime列分别为DATETIME列 - 或者至少如果他们是不是,你以合理,可排序的方式存储日期和时间(例如YYYY-MM-DD并且使用24小时制作时间) - 如果没有,你需要弄清楚你是怎么做的#39 ;重新排序。您的SQL查询看起来像这样(如果您想查看过去24小时):

SELECT InDate, InTime 
FROM [TimeinTimeout] 
WHERE EmployeeID = @p1 
ORDER BY InDate DESC, InTime DESC

然后你会使用OleDbDataReader来读取结果(如果有的话 - 如果没有,那么你知道他们还没有登录过),检查空值(如果这些列可以为空),并检查InDateInTime是否少于24小时,等等。

如果您只想检查他们是否已登录今天,那就更简单了:

SELECT InDate 
FROM [TimeinTimeout] 
WHERE EmployeeID = @p1 
ORDER BY InDate DESC

您可以使用ExecuteScalar(),检查是否为null,如果不为null,则检查日期是否为今天的日期。

另请注意,您不仅需要检查C#中的null,还要检查您的返回值是否为== DBNull.Value(与{{1}不同在C#)中。