2016-12-29 2 views
0

Ich habe userTransact Tabelle, die die (Login und Logout) Zeit und Datum enthält, jetzt habe ich diese Codes für die Dauer Berechnung verwendet, aber das Problem ist, dass es Subtract Daten auch mich ungültig geben Datum wie folgt:
Login 2016.12.22 08: 28: 27,540
Abmelde 2016.12.22 08: 28: 32,947
Dauer 1900-01-01 00: 00: 05.407
wie dieses Problem beheben ?
Die Codes für diese Berechnung sind in der Formclosing Ereignis als:Wie bekomme ich die Dauer von Subtrahieren zwei mal

SqlCommand cmd3 = new SqlCommand("insert into empTransLogin(empLogTransNo,empId,logTimeIn,logTimeOut,duration) VALUES (@logTrans,@id,@login,@logout,@duration)", cn); 
cmd3.Parameters.AddWithValue("@logTrans", x); 
cmd3.Parameters.AddWithValue("@id", deleteById); 
cmd3.Parameters.AddWithValue("@login", loginDateTime); 
cmd3.Parameters.AddWithValue("@logout", DateTime.Now); 
TimeSpan duration = DateTime.Now - loginDateTime; 
cmd3.Parameters.AddWithValue("@duration", duration); 
cmd3.ExecuteNonQuery(); 
SqlCommand cmd2 = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn); 
cmd2.ExecuteNonQuery(); 
Application.Exit(); 
+1

Wie sollte "Dauer" aussehen? Wenn Sie sich abmelden, erhalten Sie 'TimeSpan' von diesem können Sie die Dauer in Sekunden, Tics oder was Sie wollen –

+0

Bitte verwenden Sie nicht' AddWithValue'. Es wird wahrscheinlich Probleme verursachen: [Best Practices - Ausführen von SQL-Anweisungen] (http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements). –

+0

@ M.Wiśnicki die Dauer sollte um das volle Datum dann die Vollzeit sein, hier ist die Uhrzeit korrekt aber das Datum ist nicht .. es sollte das gleiche Datum sein, wenn der Benutzer sich am selben Tag an- und abgemeldet hat. –

Antwort

2
SqlCommand cmd3 = new SqlCommand("insert into empTransLogin(empLogTransNo,empId,logTimeIn,logTimeOut,duration) VALUES (@logTrans,@id,@login,@logout,@duration)", cn); 
cmd3.Parameters.AddWithValue("@logTrans", x); 
cmd3.Parameters.AddWithValue("@id", deleteById); 
cmd3.Parameters.AddWithValue("@login", loginDateTime); 
cmd3.Parameters.AddWithValue("@logout", DateTime.Now); 
TimeSpan duration = DateTime.Now - loginDateTime; 
cmd3.Parameters.AddWithValue("@duration", duration.TotalSeconds); 
cmd3.ExecuteNonQuery(); 
SqlCommand cmd2 = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn); 
cmd2.ExecuteNonQuery(); 
Application.Exit(); 

Beachten Sie, dass Gesamt kein ganzzahliger Wert ist.

+0

die Zeit in meinem Code ist perfekt bestimmt das Problem war mit dem Datum auf die Dauer schauen 1900-01-01 00: 00: 05.407 –

+0

Welchen Typ speichern Sie Duration wie in der Datenbank? Wie erhalten Sie diesen Wert mit Jahr, Monat usw., da die Dauer kein Datumstyp ist? – john

+0

Der Typ ist Datetime in der Datenbank –

Verwandte Themen