转换DateTime时丢失秒值,如何获取数据库中完整的HH:mm:ss格式时间?
问题解决方法
你的核心问题有两个:
- ToString格式字符串错误:你把固定日期
"1900-01-01"当成了格式模板,这会强制输出固定日期,还会丢失时间的秒级精度; - 不必要的字符串转换:将DateTime转为字符串传递给数据库参数,容易丢失精度,还可能引发格式兼容问题。
正确做法
直接使用DateTime类型传递参数,避免字符串转换,完整保留时间精度:
修改后的代码
// 直接转换为DateTime类型,不转成字符串 DateTime tmtke = Convert.ToDateTime(tmetake.Text); conn.Open(); MySqlCommand cmd = new MySqlCommand("UPDATE hcrsward SET crseward = @crseward " + "WHERE enccode = @enccode and entryby = @entryby and tmetake = @tmetake", conn); cmd.Parameters.AddWithValue("@enccode", tbox_passed_id.Text); // 如果dtetake也是日期类型,同样建议转成DateTime再传参 cmd.Parameters.AddWithValue("@dtetake", Convert.ToDateTime(dtetake.Text)); // 直接传递DateTime对象,保留完整时间(包括秒) cmd.Parameters.AddWithValue("@tmetake", tmtke); cmd.Parameters.AddWithValue("@crseward", cw.Text); cmd.Parameters.AddWithValue("@entryby", tbox_docby.Text); cmd.ExecuteNonQuery();
额外注意事项
- 确保
TextBox控件tmetake的输入内容包含秒数(比如1900-01-01 14:51:32),如果输入本身只有分没有秒,转换后自然会是14:51:00; - 更严谨的写法是指定数据库参数类型,避免隐式转换问题:
cmd.Parameters.Add("@tmetake", MySqlDbType.DateTime).Value = tmtke;
内容的提问来源于stack exchange,提问作者J.szareyo
相关产品推荐
相关产品推荐

