将C#中的MySqlDateTime值插入MySQL数据库

时间:2018-07-24 02:16:28

标签: c# mysql database datetime datetime-format

我有一个C#应用程序,需要将当前日期时间插入MySQL数据库中的{% csrf_token %} <script type="text/javascript"> var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val(); function csrfSafeMethod(method) { // these HTTP methods do not require CSRF protection return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); </script> 字段。我该怎么做?

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

数据库中的预期结果是正确的日期时间,但是实际值为MySqlDateTime

0000-00-00 00:00:00

MyData类:

    // 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
    }

1 个答案:

答案 0 :(得分:1)

您遇到的是MySQL bug 91199的变体。

使用默认的SQL mode,MySQL Server将拒绝由Connector / NET序列化的具有错误MySqlDateTime的错误Incorrect datetime value

但是,如果您的MySQL Server未启用NO_ZERO_DATEstrict mode,则尝试插入MySqlDateTime将“成功”,但插入的值将为{{1} }。

由于bug 91119被错误地关闭为重复项,因此可能不太可能很快解决。作为解决方法,您可以考虑切换到MySqlConnector,它是Connector / NET的OSS替代产品,可以解决此问题(以及许多其他错误)。

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

MySqlDateTime

请注意,如果无法将cmd.Parameters.AddWithValue("currentDateTime", data.currentDateTime.GetDateTime()); 转换为MySqlConversionException,则会抛出MySqlDateTime;如果这可能在您的代码中发生,则您需要测试DateTime并进行其他操作(如果是data.currentDateTime.IsValidDateTime

)。