我正在开发一个考勤管理系统,我希望它能提示用户每天进出一次。我想的是它将从数据库中选择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();
}
答案 0 :(得分:0)
您应该在表格中查看用户的上次登录日期。 我将假设您的InDate
和InTime
列分别为DATE
和TIME
列 - 或者至少如果他们是不是,你以合理,可排序的方式存储日期和时间(例如YYYY-MM-DD并且使用24小时制作时间) - 如果没有,你需要弄清楚你是怎么做的#39 ;重新排序。您的SQL查询看起来像这样(如果您想查看过去24小时):
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
(与{{1}不同在C#)中。