gpt4 book ai didi

c# - 无法使用 0000-00-00 00 :00:00 values 将 MySQL.DateTime 转换为 System.DateTime

转载 作者:行者123 更新时间:2023-11-29 01:17:11 25 4
gpt4 key购买 nike

我正在处理一个 C# 项目,但遇到了一个问题。该程序允许用户连接到 MySQL 数据库并从每个选定的表中检索信息并将数据写入文件。问题是因为我不知道模式会是什么样子或者它会包含什么值。

如果时间戳列包含日期 0000-00-00 00:00:00,我会收到转换错误,无论我尝试什么,它都不起作用。我试过转换成一个字符串我试过转换成一个 DateTime 但我总是得到错误。

下面是我目前尝试获取数据的方式:

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 zero date 和 convertzerodate to null 选项,如下所示:

connString = "server=" + server + ";uid=" + username + ";pwd=" + password + ";port=" + port + ";Allow Zero Datetime=true;zeroDateTimeBehavior=convertToNull;Convert Zero Datetime=true";

最佳答案

查看this documentation , 看起来您指定了两个相互矛盾的选项(AllowZeroDateTime=trueConvertZeroDateTime=true)和一个似乎未列出的选项(ZeroDateTimeBehavior=ConvertToNull)。

我建议,除非您有实际数据 DateTime.MinValue,您不想将其与“零”值混淆,否则您只需指定 ConvertZeroDateTime=true 并检测结果是否为 DateTime.MinValue。您绝对不应该调用 reader.GetDateTime(),然后将结果转换为字符串,然后返回到 DateTime - 您应该尽可能避免字符串转换,因为它们很容易把事情搞砸。

对于这些“零”值,你想要什么字符串值并不是很清楚,但你应该能够很容易地用 DateTime.MinValue 对它们进行特殊处理。就我个人而言,实际上我会尽量将数据保留为“原生”形式,而不是将所有内容都转换为字符串,但这是另一回事。

关于c# - 无法使用 0000-00-00 00 :00:00 values 将 MySQL.DateTime 转换为 System.DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15982137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com