C# 是否每天提示用户超时一次?
我正在开发一个考勤管理系统,我希望它能提示用户每天一次考勤。我的想法是,它将从数据库中选择employeeID和Indate、intime和out time,如果Indate和intime有值,它将以每天一次的形式显示时间,与超时选择Indate、outtime等内容完全相同。这是我的代码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
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程序新手,你需要那里的命令来保证你得到的是最新的数据-如果用户在该表中有多行,你可能总是返回最早的一行,或者返回最新的一行以外的其他行。。。