我有一个C#应用程序,它需要将当前的日期时间插入到MySQL数据库的datetime
字段中。我该如何做到这一点?
我使用的是MySQL连接器/NET 6.9.9。下面是我到目前为止所尝试的内容。data.currentDateTime
的类型为MySqlDateTime
。
数据库中的预期结果是正确的datetime,但实际值是0000-00-00 00:00:00
。
// Set up data object and add datetime
MyData data = new MyData();
data.currentDateTime = new MySqlDateTime(DateTime.Now);
// Insert into database
try
{
MySqlConnection conn = getMySqlConnection();
conn.Open();
MySqlCommand cmd = new MySqlCommand(@"
INSERT INTO my_data (`current_datetime`)
VALUES (@currentDateTime)
", conn);
log.Debug(data.currentDateTime); // correct timestamp
cmd.Parameters.AddWithValue("currentDateTime", data.currentDateTime);
cmd.ExecuteNonQuery();
// Value in the database is 0000-00-00 00:00:00
} catch (Exception e) {
// Hnadle exception
}
MyData类:
public class MyData
{
public int id { get; set; }
public MySqlDateTime currentDateTime { get; set; }
// Other fields
public MyData()
{
// Empty constructor
}
}
发布于 2018-07-24 14:29:08
您遇到的是MySQL bug 91199的变体。
使用默认SQL mode,MySQL服务器将拒绝连接器/网络使用Incorrect datetime value
错误序列化的不正确MySqlDateTime
。
但是,如果您的MySQL服务器没有启用NO_ZERO_DATE
和strict mode,则尝试插入MySqlDateTime
将“成功”,但插入的值将为0000-00-00 00:00:00
。
由于bug 91119被错误地作为副本关闭,这可能不太可能很快得到修复。作为一种变通办法,您可以考虑切换到MySqlConnector,这是连接器/网络的一种开源软件替代方案,可以修复此问题(以及许多其他错误)。
若要使用MySql.Data解决此问题,请添加基础DateTime
作为参数值,而不是MySqlDateTime
对象:
cmd.Parameters.AddWithValue("currentDateTime", data.currentDateTime.GetDateTime());
请注意,如果MySqlDateTime
不能转换为DateTime
,则会抛出MySqlConversionException
;如果在代码中可能发生这种情况,则需要测试data.currentDateTime.IsValidDateTime
,如果是false
,则执行其他操作。
https://stackoverflow.com/questions/51489520
复制相似问题