如何在 C# 中为 MySQL 列很好地解析日期时间?

How i make a good parse of a Datetime in C# for a MySQL Column?

提问人:Mauricio 提问时间:11/2/2023 最后编辑:Joel CoehoornMauricio 更新时间:11/2/2023 访问量:54

问:

当我尝试将日期放入MySQL中的日期行时,我遇到了一个问题,导致此错误:

this error in my program

但我的代码是这样的:

DateTime tomarIngreso = dateTimePicker_FechaDeIngreso_Agregar.Value;
DateTime tomarPlazo = dateTimePicker_FechaPlazo_Agregar.Value;

string plazoFormat = tomarPlazo.ToString("yyyy-MM-dd");
string ingresoFormat = tomarIngreso.ToString("yyyy-MM-dd");

DateTime plazo = DateTime.ParseExact(plazoFormat, "yyyy-MM-dd", CultureInfo.InvariantCulture);
DateTime ingreso = DateTime.ParseExact(ingresoFormat, "yyyy-MM-dd", CultureInfo.InvariantCulture);

查询显然有效,但是当我查看phpMyAdmin时,我得到这个:

this...

当我再次启动程序时,它会说相同的 MessageBox 错误,并且日期中的行无法出现在 dataGridView 中。0000-00-00

我该如何解决这个问题?

我认为是我用于dateTimePicker的解析方法,我采用以下格式:

this format

所以,当我试图从解析到时,它有点失败或类似的东西。dd-MM-yyyyyyyy-MM-dd

列和 数据类型中具有日期。我尝试在MySQL列中使用Datetime,但它不起作用并导致程序出现故障。我不需要 Datetime 作为数据类型,只需要 Date。IngresoPlazo

C# MySQL 语法错误

评论

0赞 Shameel 11/2/2023
尝试格式字符串中的“yyyy-MM-dd HH:mm”
2赞 Franz Gleichmann 11/2/2023
你有一个约会时间...然后你把它转换成一个字符串.....只是为了再次将该字符串解析为日期时间......为什么?
1赞 Mauricio 11/2/2023
BCS 我很绝望

答:

3赞 Joel Coehoorn 11/2/2023 #1

问题是不是一个有效的日期,即使它看起来像一个。我们知道这一点,因为这个值如何回答诸如“这是一周中的哪一天?”或“这是几月?”之类的问题。0000-00-00

因此,您将永远无法将此输入分析为 C# 或值。相反,您需要在某处(可能在 SQL 中,可能在报告工具中,也许在 C# 中)有代码来检测它并决定您希望它如何显示。DateOnlyDateTime

3赞 Bradley Grainger 11/2/2023 #2

如果您的MySQL服务器上未启用NO_ZERO_DATE模式,则MySQL将允许存储为“虚拟”日期值。我强烈建议您不要这样做,但是如果该数据存在于您的数据库中并且您必须使用它,则有两种选项可以在 C# 中处理它:0000-00-00

  1. 在连接字符串中设置。设置此选项后,MySqlConnector 将转换为 。ConvertZeroDateTime=true;0000-00-00DateTime.MinValue
  2. 在连接字符串中设置。设置此选项后,返回的所有值都将作为支持存储 或 特殊值的 MySqlDateTime 对象返回;用来区分它们。AllowZeroDateTime=true;DATEMySqlDataReader.GetValueDateTime0000-00-00IsValidDateTime

请注意,在这两种情况下,您都应该使用 or 从数据库中检索值,而不是自己调用和分析它。GetValueGet(MySql)DateTimeGetString