我有一个c#应用程序,需要将当前日期时间插入 datetime
mysql数据库中的字段。我如何做到这一点?
我使用的是mysql connector/net6.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
}
}
1条答案
按热度按时间azpvetkf1#
您遇到了mysql错误91199的变体。
在默认的sql模式下,mysql服务器将拒绝不正确的
MySqlDateTime
由connector/net用Incorrect datetime value
错误。但是,如果您的mysql服务器没有
NO_ZERO_DATE
并启用严格模式,然后尝试插入MySqlDateTime
将“成功”,但插入的值将0000-00-00 00:00:00
.由于错误91119被错误地作为一个副本关闭,这可能不会很快得到修复。作为一种解决方法,您可以考虑切换到mysqlconnector,这是一种替代connector/net的操作系统,可以修复此问题(以及许多其他错误)。
要使用mysql.data解决此问题,请添加
DateTime
作为参数值,而不是MySqlDateTime
对象:请注意,这将抛出
MySqlConversionException
如果MySqlDateTime
无法转换为DateTime
; 如果代码中可能发生这种情况,则需要进行测试data.currentDateTime.IsValidDateTime
如果是这样的话,做点别的false
.