gpt4 book ai didi

c# - 将 MySqlDateTime 值从 C# 插入到 MySQL 数据库

转载 作者:行者123 更新时间:2023-11-29 10:08:15 25 4
gpt4 key购买 nike

我有一个 C# 应用程序,需要将当前日期时间插入 MySQL 数据库中的 datetime 字段。我该如何实现这个目标?

我正在使用 MySQL Connector/NET 6.9.9。以下是我到目前为止所尝试过的。 data.currentDateTime 的类型为 MySqlDateTime

数据库中的预期结果是正确的日期时间,但实际值为 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
}
}

最佳答案

您遇到了 MySQL bug 91199 的变体.

默认SQL mode ,MySQL 服务器将拒绝由 Connector/NET 序列化的不正确的 MySqlDateTime,并显示 不正确的日期时间值 错误。

但是,如果您的 MySQL 服务器没有 NO_ZERO_DATEstrict mode启用,然后尝试插入 MySqlDateTime 将“成功”,但插入的值将为 0000-00-00 00:00:00

bug 91119已被错误地作为重复项关闭,这可能不会很快得到修复。作为解决方法,您可以考虑切换到 MySqlConnector ,Connector/NET 的 OSS 替代品,修复了这个问题(以及许多其他错误)。

要使用 MySql.Data 解决此问题,请添加基础 DateTime 作为参数值,而不是 MySqlDateTime 对象:

cmd.Parameters.AddWithValue("currentDateTime", data.currentDateTime.GetDateTime());

请注意,如果MySqlDateTime无法转换为DateTime,则会抛出MySqlConversionException;如果您的代码中可能发生这种情况,您需要测试 data.currentDateTime.IsValidDateTime 并在结果为 false 时执行其他操作。

关于c# - 将 MySqlDateTime 值从 C# 插入到 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com