Nicht in der Lage zu konvertieren MySQL.DateTime System.DateTime mit 0000-00-00 00:00:00 Werte
Ich arbeite an einem C# - Projekt, und ich bin vor ein Problem. Das Programm ermöglicht es dem Benutzer, eine Verbindung zu einer MySQL-Datenbank und abrufen von Informationen aus jeder ausgewählten Tabelle und schreiben Sie die Daten in einer Datei. Das problem ist, denn ich habe keine Ahnung, was das schema Aussehen wird oder welche Werte es sich zu enthalten.
Wenn die timestamp-Spalte enthält das Datum 0000-00-00 00:00:00 ich bekomme den Fehler bei der Konvertierung, und egal was ich versuche es klappt nie. Ich habe versucht, die Umwandlung in einen string habe ich versucht, die Umwandlung in einen DateTime-aber ich bekomme immer den Fehler.
Unten ist, ist wie ich bin versucht derzeit, um die Daten abzurufen:
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++;
}
}
}
}
Ich habe auch Hinzugefügt das zulassen von null-Datum und convertzerodate zu null-option in der connector-string wie folgt:
connString = "server=" + server + ";uid=" + username + ";pwd=" + password + ";port=" + port + ";Allow Zero Datetime=true;zeroDateTimeBehavior=convertToNull;Convert Zero Datetime=true";
- Warum sind Sie konvertieren ein DateTime in ein string und dann analysieren Sie es wieder zurück? Sicher, man würde immer nur wollen, dass es wieder den gleichen DateTime-es begann mit.
- Auch, dass Sie noch nicht erzählte uns, was tatsächlich passiert. Sie sagen, Sie bekommen "der Fehler" aber ohne zu sagen was das Fehler ist.
- Die MySQL connector benutzt du übrigens? Alles, was ich gesehen habe, über diese Verbindung-Zeichenfolge-Optionen, schlägt es für einen Java-Treiber. Sind Sie sicher, dass die Treiber, die Sie verwenden unterstützt Sie?
- der Fehler in der überschrift. Ich möchte das Datum werden am Ende in einem string aber ich habe irgendwo gelesen, dass Sie brauchen, um zu konvertieren .net datetime konvertieren und dann zurück in einen string
- Ich bin mir nicht 100% sicher, ob Sie sollten arbeiten oder nicht, von was ich gelesen habe, die Sie erwähnt C#, aber ich könnte falsch sein. Ich bin mit dem ado.net connector von mysql
- Ah - es war überhaupt nicht klar, dass das war der Fehler; es Klang wie die Beschreibung der Titel. Und Nein, Sie sollten nicht definitiv konvertiert ein DateTime in ein string und dann wieder zurück. Nur mit
reader.GetDateTime
ist, wie sollten Sie ein DateTime. - Ich habe versucht
DateTime date = reader.getDateTime(field);
und seine immer noch nicht funktioniert, bekomme den gleichen Fehler - Haben Sie getan, dass nach der änderung, nur angeben, ConvertZeroDateTime=wahr, wenn, wie ich vorgeschlagen habe?
- danke das hat geklappt, ich nahm die falsche Sache aus der connector-string. Vielen Dank für Eure Hilfe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf diese Dokumentation, wie es aussieht, sind die Angabe von zwei gegensätzlichen Optionen (
AllowZeroDateTime=true
undConvertZeroDateTime=true
) und eine, die scheint nicht aufgeführt zu werden (ZeroDateTimeBehavior=ConvertToNull
).Schlage ich vor, dass, wenn Sie haben, ist-Daten, die
DateTime.MinValue
die Sie nicht wollen, zu verwechseln mit der "null" Wert, Sie nur angebenConvertZeroDateTime=true
und erkennen, wenn das ErgebnisDateTime.MinValue
. Sie definitiv sollte nicht nennenreader.GetDateTime()
, dann konvertieren Sie das Ergebnis in einen string und dann wieder einDateTime
- Sie sollten es vermeiden, string-Konvertierungen so weit wie Sie können, so können Sie Durcheinander zu bringen, die für Sie ziemlich leicht.Es ist nicht wirklich klar, was ein string-Wert, den Sie für diese "null" - Werte, aber Sie sollten in der Lage sein, um speziellen-Fall Sie mit
DateTime.MinValue
relativ leicht. Ich persönlich würde tatsächlich versuchen, um die Daten in seiner "nativen" form, so viel wie möglich, anstatt zu konvertieren, alles zu strings, aber das ist eine andere Schlacht.