将mysqldatetime值从c#插入mysql数据库

lyfkaqu1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(587)

我有一个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
        }
    }
azpvetkf

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 对象:

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

请注意,这将抛出 MySqlConversionException 如果 MySqlDateTime 无法转换为 DateTime ; 如果代码中可能发生这种情况,则需要进行测试 data.currentDateTime.IsValidDateTime 如果是这样的话,做点别的 false .

相关问题