2017-03-12 24 views
0

我正在開發一個考勤管理系統,我希望它提示用戶每天進/出一次。我在想的是它會從數據庫中選擇employeeID和Indate,timetime和outtime,如果indate和intime有價值,它會顯示每天一次的時間obth相同thig w/timeout選擇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

我想限制用戶的登錄,但我想知道是什麼代碼來確定,如果某列有價值的東西那樣 –

+0

如果數據庫列沒有價值它會違反,但如果它有價值,它會而不是 –

回答

0

您應該檢查您的表是否爲用戶的上次登錄日期。 我打算假設您的InDateInTime列分別是DATETIME列 - 或者至少如果它們不是,則表明您以合理的,可排序的方式存儲日期和時間(例如,YYYY-MM- DD和使用24小時時間) - 如果沒有,你需要弄清楚你將如何分類。你的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(),檢查是否爲空,如果不爲空,則檢查日期是否爲今天的日期。

也請記住,你需要檢查不只是在C#null,還要檢查你的返回值(一個或多個)不== DBNull.Value(這是不一樣的null在C#)。

+0

我想到了其他的東西,SELECT EmployeeID,InDate,InTime FROM TimeinTimeout WHERE EmployeeID = @ 1;如果(reader [3] == null){//保存到數據庫} else {MessageBox.Show(「每天一次的時間」);這會工作嗎?我只是一個新手C#程序員 –

+0

你需要在那裏'ORDER BY'來保證你得到最新的數據 - 如果用戶在該表中有多行,你可能總是最終返回最早的一個,或者其他一個比最新... –

相關問題