提问人:Mauricio 提问时间:11/2/2023 最后编辑:Joel CoehoornMauricio 更新时间:11/2/2023 访问量:54
如何在 C# 中为 MySQL 列很好地解析日期时间?
How i make a good parse of a Datetime in C# for a MySQL Column?
问:
当我尝试将日期放入MySQL中的日期行时,我遇到了一个问题,导致此错误:
但我的代码是这样的:
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时,我得到这个:
当我再次启动程序时,它会说相同的 MessageBox 错误,并且日期中的行无法出现在 dataGridView 中。0000-00-00
我该如何解决这个问题?
我认为是我用于dateTimePicker的解析方法,我采用以下格式:
所以,当我试图从解析到时,它有点失败或类似的东西。dd-MM-yyyy
yyyy-MM-dd
列和 数据类型中具有日期。我尝试在MySQL列中使用Datetime,但它不起作用并导致程序出现故障。我不需要 Datetime 作为数据类型,只需要 Date。Ingreso
Plazo
答:
问题是不是一个有效的日期,即使它看起来像一个。我们知道这一点,因为这个值如何回答诸如“这是一周中的哪一天?”或“这是几月?”之类的问题。0000-00-00
因此,您将永远无法将此输入分析为 C# 或值。相反,您需要在某处(可能在 SQL 中,可能在报告工具中,也许在 C# 中)有代码来检测它并决定您希望它如何显示。DateOnly
DateTime
如果您的MySQL服务器上未启用NO_ZERO_DATE
模式,则MySQL将允许存储为“虚拟”日期值。我强烈建议您不要这样做,但是如果该数据存在于您的数据库中并且您必须使用它,则有两种选项可以在 C# 中处理它:0000-00-00
- 在连接字符串中设置。设置此选项后,MySqlConnector 将转换为 。
ConvertZeroDateTime=true;
0000-00-00
DateTime.MinValue
- 在连接字符串中设置。设置此选项后,返回的所有值都将作为支持存储 或 特殊值的
MySqlDateTime
对象返回;用来区分它们。AllowZeroDateTime=true;
DATE
MySqlDataReader.GetValue
DateTime
0000-00-00
IsValidDateTime
请注意,在这两种情况下,您都应该使用 or 从数据库中检索值,而不是自己调用和分析它。GetValue
Get(MySql)DateTime
GetString
评论