运行程序时没有任何问题,但我在tableAdapter中输出错误。
OleDbCommand cmd4 = new OleDbCommand("Insert Into loginReport Values(?,?,?,?,?,?)", conn);cmd4.Parameters.AddWithValue("Username", textBox1.Text);
cmd4.Parameters.AddWithValue("Account Type", "admin");
cmd4.Parameters.AddWithValue("Time(LOG-IN)", DateTime.Now.TimeOfDay); //this where i get wrong output
cmd4.Parameters.AddWithValue("Time(LOG-OUT)", DateTime.Now.TimeOfDay); //this where i get wrong output
cmd4.Parameters.AddWithValue("Date()", DateTime.Now.Date);
cmd4.Parameters.AddWithValue("Remarks", "admin");
cmd4.ExecuteNonQuery();
conn.Close();
在Time(Log-in/Log-out)
列中,我只需要获得时间hh:mm am/pm
格式,但该日期(12/30/1899
)的来源是什么?我相信这与格式有关,但我不知道该怎么做。我的数据库很好,我检查了数据类型和日期/时间的格式。我选择了中等时间,我的数据库看起来很好。
答案 0 :(得分:1)
在.NET中没有简单的TIME类型,只有DateTime类型,因此当您使用db返回的数据加载适配器时,NET只能将值存储在DateTime变量中(或者在具有DateTime的DataColumn中更好)类型)。然后,当您使用DataGridView显示该数据时,将显示该列的Date部分以及您可以看到的结果。
修复"格式"通过网格显示,您只需要为您的网格提供显示DateTime值的列的相应格式说明符。
例如,假设您的网格被调用dgv
(在设置DataSource之后)
dgv.Columns["Time(LOG-IN)"].DefaultCellStyle.Format = "hh:mm:ss tt";
dgv.Columns["Time(LOG-OUT)"].DefaultCellStyle.Format = "hh:mm:ss tt";
作为旁注,我强烈建议不惜一切代价避免AddWithValue
。这个shorcut在处理日期时有很多问题
答案 1 :(得分:-1)
您的代码会自动解析为SQL,因此您的数据库会插入默认的日期时间值12/30/1899。您必须首先在C#中声明一个日期时间变量,设置它,然后传入变量,即
DateTime now = DateTime.Now;
OleDbCommand cmd4 = new OleDbCommand("Insert Into loginReport Values(?,?,?,?,?,?)", conn);cmd4.Parameters.AddWithValue("Username", textBox1.Text);
cmd4.Parameters.AddWithValue("Account Type", "admin");
cmd4.Parameters.AddWithValue("Time(LOG-IN)", now); //this where i get wrong output
cmd4.Parameters.AddWithValue("Time(LOG-OUT)", now); //this where i get wrong output
cmd4.Parameters.AddWithValue("Date()", now);
cmd4.Parameters.AddWithValue("Remarks", "admin");
cmd4.ExecuteNonQuery();
conn.Close();