我有一个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
}
答案 0 :(得分:1)
您遇到的是MySQL bug 91199的变体。
使用默认的SQL mode,MySQL Server将拒绝由Connector / NET序列化的具有错误MySqlDateTime
的错误Incorrect datetime value
。
但是,如果您的MySQL Server未启用NO_ZERO_DATE
和strict 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
。