【发布时间】:2016-12-29 17:01:13
【问题描述】:
我有包含(登录和注销)时间和日期的 userTransact 表,现在我使用这些代码来计算持续时间,但问题是它的子日期也给了我无效的日期,如下所示:
登录 2016-12-22 08:28:27.540
注销 2016-12-22 08:28:32.947
持续时间 1900-01-01 00:00:05.407
如何解决这个问题?
此计算的代码在 FormClosing 事件中为:
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();
【问题讨论】:
-
duration应该怎么看?当您执行logout-login时,您将获得TimeSpan,您可以从中获得持续时间(以秒为单位)、抽动或您想要的任何内容 -
请不要使用
AddWithValue。很可能会产生问题:Best Practices - Executing Sql Statements. -
@Tima'aTamim 这不是持续时间。你误解了这个概念。
-
持续时间应该是从登录之日起已经过期的时间。因此,您应该考虑更改存储
duration的参数。只需保持几秒钟 -
你真的需要存储持续时间吗?除非您根据持续时间进行查询,例如查找最长或最短登录时间,否则最好不要存储该列。
标签: c# winforms datetime duration