无法转换MySQL.到系统的日期时间.DateTime,值为0000-00-00 00:00:00
本文关键字:DateTime 0000-00-00 时间 值为 日期 转换 MySQL 系统 | 更新日期: 2023-09-27 18:09:10
我正在做一个c#项目,我面临一个问题。该程序允许用户连接到MySQL数据库,从每个选定的表中检索信息,并将数据写入文件。问题是我不知道这个模式会是什么样子,也不知道它会包含什么值。
如果时间戳列包含日期0000-00-00 00:00:00我得到转换错误,无论我尝试它永远不会工作。我试过转换为字符串,我试过转换为日期时间,但我总是得到错误。
下面是我目前试图获取数据的方式:
using (ConnectMySQLDB db = new ConnectMySQLDB(databaseSettings))
{
string query = string.Format("SELECT * FROM {0}.{1}", database, table);
Console.WriteLine("Query: {0}", query);
using (MySqlCommand cmd = new MySqlCommand(query, db.conn))
{
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int i = 1;
while (reader.Read())
{
Console.WriteLine("ID: {0}", i);
fieldsAndValues = new Dictionary<string, string>();
foreach (ColumnDataTypes fieldAndType in fieldsAndTypes)
{
Console.WriteLine("Column: {0} Type: {1}", fieldAndType.field, fieldAndType.dataType);
string formattedValue = "";
if (fieldAndType.dataType == "timestamp")
{
DateTime date = DateTime.Parse(reader.GetDateTime(fieldAndType.field).ToString());
formattedValue = date.ToString("yyyyMMdd");
}
else
{
formattedValue = getDBFormattedValue(reader.GetString(fieldAndType.field), fieldAndType.dataType);
fieldsAndValues.Add(fieldAndType.field, formattedValue);
}
}
rows.Add(fieldsAndValues);
i++;
}
}
}
}
我还在连接器字符串中添加了allow zerodate和convertzerodate to null选项,如下所示:
connString = "server=" + server + ";uid=" + username + ";pwd=" + password + ";port=" + port + ";Allow Zero Datetime=true;zeroDateTimeBehavior=convertToNull;Convert Zero Datetime=true";
查看此文档,看起来您指定了两个相互矛盾的选项(AllowZeroDateTime=true
和ConvertZeroDateTime=true
)和一个似乎未列出的选项(ZeroDateTimeBehavior=ConvertToNull
)。
我建议,除非您有DateTime.MinValue
的实际数据,否则您不想与"零"值混淆,否则只需指定ConvertZeroDateTime=true
并检测结果是否为DateTime.MinValue
。绝对不应该调用reader.GetDateTime()
,然后将结果转换为字符串,然后再返回到DateTime
——您应该尽可能避免字符串转换,因为它们很容易把事情搞砸。
对于这些"零"值,您想要的字符串值并不是很清楚,但是您应该能够相当容易地使用DateTime.MinValue
对它们进行特殊处理。就我个人而言,我实际上会尽可能地保持数据的"原生"形式,而不是将所有内容转换为字符串,但这是另一场战斗。