Benutzer mit den meisten Antworten
Formatierte Ausgabe eines Dataumsfeldes aus dem SQL-Server

Frage
-
Hallo
bei der Migration einer Websiet (ASP.NET 2.0) musste ich von deutschem auf US System umstellen (WinServer 2012)
mit zugehörigem SQL-Server.Trotz Einstellung von SQL-Server und ODBC Quelle auf Deutsch, nimmt das System kein deutsches Datumsforrmat an.
Die Eingabe konnte ich umstellen (z.B. "yyyyMMdd"). Nun erfolgt die Ausgabe aber wieder in diesem Format.
Ich habe dann versucht das Datum wie folgt umzuformatieren:
Tx_ShutdownDate.Text = Convert.ToDateTime(dt.Rows[0]["ShutdownDate"]).ToString("dd.MM.yyyy");
Das ist auch der Vorschlag, den man in anderen Beispielen im Web findet.
Leider funktionierts nicht!!Auch folgendes, mit anderer Klammerung funktioniert nicht:
Tx_ShutdownDate.Text = Convert.ToDateTime(dt.Rows[0]["ShutdownDate"].ToString("dd.MM.yyyy"));
oder
DateTime d = Convert.ToDateTime(dt.Rows[0]["ShutdownDate"].ToString());
Tx_ShutdownDate.Text = d.ToString("dd.MM.yyyy");Es nützt auch nichts, diese Anweisung in zwei aufzuteilen, wie in anderen Beispielen zu sehen.
Folgende Fehlermeldung:
"Eine Ausnahme vom Typ "System.FormatException" ist in mscorlib.dll aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.
Zusätzliche Informationen: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."Kann mir bitte jemand helfen!
Vielen Dank
Helmut
- Bearbeitet Helmut19 Montag, 6. November 2017 22:03
Antworten
-
Hallo alle,
der Vollständigkeit halber auch hier die Lösung.
und nochmals vielen Dank für Eure HInweise.
Sie waren sehr hilfreich. Vor allem das mit dem varchar-Feld.
Ich habe es erst gar nicht glauben wollen, weil ich doch alle Datumsfelder auch als "dateiteime" angelegt habe.
Ausserdem kam ja der erste Fehler diesbezüglich beim Eintragen eines neuen Datensatzes, und zwar ebenfalls mit Hinweis auf falsches datetime-Format.Und zuvor hat diese Webanwendung jahrelang funktioniert.
Es war nun so:
Es war tatsächlich ein varchar-Feld statt eines datetime-Feldes rein gekommen, als ich damals die Datenbank aus
dem Quellcode der Web-Anwendung für den unglücklichen Besitzer rekonstruiert hatte.Und dann habe ich zwei unterschiedliche Fehler für einen gehalten.
Der Fehler beim Eintragen eines Datensatzes erfolgte, weil ein Datumsfeld leer war, obwohl NULL-Werte erlaubt sind.
Das habe ich jetzt erst raus bekommen.
Seltsamerweise kam dann dieser Fehler nicht mehr, als ich das Datumsformat auf "yyyyMMdd" geändert hatte.
Ab da konnte ich die neu eingetragenen Datensätze nicht mehr anzeigen, weil dieses Datumsformat von den
obigen Funktionen nicht konvertiert werden konnte.Also danke nochmal.
Grüsse
Helmut- Als Antwort markiert Helmut19 Mittwoch, 8. November 2017 22:23
Alle Antworten
-
Hi Helmut,
von welchem Typ ist das Feld "ShutdownDate" in der Datenbank? Warum nutzt Du ODBC?Wenn das Feld in der Datenbank vom Typ date bzw. datetime ist, dann sollten Eingaben in der lokalen Culture in die invariante Culture beim Abspeichern umgewandelt werden und nach dem Auslesen für die Anzeige wieder in die lokale Culture umgewandelt werden. Dann gibt es keine FormatException.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hi Peter,
danke für Deine Antwort.
Es ist ein SQL-Server 2014.
Die Web-Anwendung ist schon ein paar Jahre alt. Und sie funktionierte eben bis zum Migrationszwang.
Leider hatte ich keine Möglichkeit ein deutsches System zu nehmen. Ich habe auch keine Zeit, sie umzuschreiben.Ich habe alle Culture-Einstellungen vorgenommen, die ich finden konnte. Im Beriebssystem, im SQL-Server im ODBC.
Das hat nichts geholfen, wie oben schon beschrieben.
Vielleicht habe ich ja auch was übersehen....?Vorher funktionierte die Ausgabe über:
Tx_Implemented.Text = dt.Rows[0]["Implemented"].ToString();
Ich musste die Eingabe aber wegen der Culture-Probleme wie folgt ändern:
return DBconn.executeInsertQuery(QueryRepositorie.insertMachine(m.customerId, m.name, m.inventoryNumber, m.localization, m.costCenter, m.division, dtImplanted.ToString("yyyyMMdd"), dtShutDown.ToString("yyyyMMdd"), m.contact, m.notes, m.description, m.size, m.unity, m.printPos));
Durch "InsertMachine(..)" wird das SQL-Stmnt zusammengesetzt.
Und hier musste ich für die Datums-Formatierung dieses generelle Format wählen (yyyyMMdd),
statt dd.MM.yyyy. Nun bekomme ich es mit dem neuen Eingabeformat auch wieder zurück.Die alten Einträge in der Datenbank, die vor der Migration gemacht wurden, geben weiterhin, über das obige Statement, das deutsche Format aus, also wie eingegeben.
- Bearbeitet Helmut19 Dienstag, 7. November 2017 18:05
-
Hallo alle,
der Vollständigkeit halber auch hier die Lösung.
und nochmals vielen Dank für Eure HInweise.
Sie waren sehr hilfreich. Vor allem das mit dem varchar-Feld.
Ich habe es erst gar nicht glauben wollen, weil ich doch alle Datumsfelder auch als "dateiteime" angelegt habe.
Ausserdem kam ja der erste Fehler diesbezüglich beim Eintragen eines neuen Datensatzes, und zwar ebenfalls mit Hinweis auf falsches datetime-Format.Und zuvor hat diese Webanwendung jahrelang funktioniert.
Es war nun so:
Es war tatsächlich ein varchar-Feld statt eines datetime-Feldes rein gekommen, als ich damals die Datenbank aus
dem Quellcode der Web-Anwendung für den unglücklichen Besitzer rekonstruiert hatte.Und dann habe ich zwei unterschiedliche Fehler für einen gehalten.
Der Fehler beim Eintragen eines Datensatzes erfolgte, weil ein Datumsfeld leer war, obwohl NULL-Werte erlaubt sind.
Das habe ich jetzt erst raus bekommen.
Seltsamerweise kam dann dieser Fehler nicht mehr, als ich das Datumsformat auf "yyyyMMdd" geändert hatte.
Ab da konnte ich die neu eingetragenen Datensätze nicht mehr anzeigen, weil dieses Datumsformat von den
obigen Funktionen nicht konvertiert werden konnte.Also danke nochmal.
Grüsse
Helmut- Als Antwort markiert Helmut19 Mittwoch, 8. November 2017 22:23