2017-03-12 7 views
0

Ich entwickle ein Anwesenheitsverwaltungssystem, ich möchte, dass der Benutzer einmal pro Tag ein- und ausgeht. Was ich denke, ist es wird die employeeID und Indate, intime und out Zeit aus der Datenbank auswählen und wenn indate und intime Wert hat, wird es zeigen, einmal pro Tag obly same thigh w/timeout wählen indate, outtime usw. Hier ist meine CodeDen Benutzer einmal am Tag zur Ein-/Auszeit auffordern?

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

Wo werden Sie nach der letzten Anmeldung gefragt? Du scheinst zu wissen, was du zu tun hast - was ist deine Frage? –

+0

Ich denke über die Begrenzung der Benutzeranmeldung, aber ich möchte wissen, was ist der Code zu seterminine, wenn eine bestimmte Spalte Wert so etwas hat –

+0

Wenn Datenbankspalte keinen Wert hat, wird es ausgeführt, aber wenn es Wert hat, wird es nicht –

Antwort

0

Sie sollten Ihre Tabelle nach dem letzten Login-Datum des Benutzers überprüfen. Ich gehe davon aus, dass Ihre InDate und InTime Spalten sind DATE und TIME Spalten, bzw. - oder zumindest, wenn sie es nicht sind, dass Sie Datum und Uhrzeit in einem vernünftigen, sortierbar Weise sind die Speicherung (zB YYYY-MM- DD und 24-Stunden-Uhr für die Zeit verwenden) - wenn nicht, müssen Sie herausfinden, wie Sie sortieren werden. Ihre SQL-Abfrage würde wie folgt aussehen (wenn Sie die letzten 24 Stunden überprüfen möchten):

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

Sie dann einen OleDbDataReader verwenden würden die Ergebnisse aus, dass (wenn überhaupt zu lesen - wenn keiner dann wissen Sie, sie haven ‚angemeldet t in immer), überprüfen Sie für NULL-Werte (falls diese Spalten NULL-Werte zulassen) sind, und prüfen, ob die InDate und InTime sind weniger als 24 Stunden, usw.

wenn Sie wollen einfach nur überprüfen, ob sie in heute angemeldet, es ist ein wenig einfacher:

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

Und Sie könnten ExecuteScalar() verwenden, auf Null prüfen, und wenn nicht null dann überprüfen Sie, dass das Datum das heutige Datum ist.

Denken Sie auch daran, dass Sie für null in C# nicht nur zu prüfen, sondern auch überprüfen, ob Ihr Rückgabewert (e) nicht == DBNull.Value (die als null in C# nicht das gleiche ist).

+0

Ich habe tatsächlich an etwas anderes gedacht, SELECT EmployeeID, InDate, InTime VON TimeInTimeout WHERE EmployeeID = @ 1; if (reader [3] == null) {// in Datenbank speichern} else {MessageBox.Show ("Zeit einmal pro Tag"); Würde das funktionieren? Ich bin nur ein Anfänger C# -Programmierer –

+0

Sie benötigen die 'ORDER BY' in dort, um sicherzustellen, dass Sie die neuesten Daten erhalten - wenn der Benutzer mehrere Zeilen in dieser Tabelle hat, könnten Sie immer die früheste, oder eine andere zurückgeben als die neuesten ... –

Verwandte Themen