2009-07-16 6 views
0

Ich habe eine Windows-Anwendung, auf hunderten von Computern verwendet. Es ruft Daten von meinem Sql-Server als Zeichenfolge ab und konvertiert diese Zeichenfolge in das Datum/Uhrzeit-Format, um einige Datumszeitunterschiede zu berechnen. Manchmal wird auf einem System beim Konvertieren von Zeichenfolge in Datum ein Fehler angezeigt. "String wurde nicht als gültige DateTime erkannt".Wie stelle ich sicher, dass alle Clients eine DateTime-Zeichenfolge der Datenbank korrekt analysieren können?

Die Windows DateTime-Einstellungen jedes Computers sind nicht identisch und wir können den Client nicht zwingen, ein Format zu verwenden.

Jetzt, wie man mit dieser Codeseite handhabt?

Antwort

0

Sie müssten wissen, welche Kultur die Datumsstrings wie erstellt werden, da Sie die DateTime.Parse-Methode verwenden können, wie folgt:

DateTime.Parse("2001-01-01", CultureInfo.GetCultureInfo("sv-SE")); 

Wo die Zeichenfolge ist das Datum aus Die Datenbank und die Kultur sind die bekannte Kultur.

+0

versucht. funktioniert nicht .... Ich gehe jetzt ... fange dich morgen und werde meinen Code hier einfügen ... danke sowieso Jungs –

1

Ändern Sie das Zeichenfolgenformat, das SQL Server zurückgibt. Wenn Sie für das Datum ein JJJJ-MM-TT-Format verwenden, sollte die Konvertierung ungeachtet der Einstellungen problemlos funktionieren.

Mit etwas Glück haben Sie auch gespeicherte Prozeduren verwendet und müssen nicht einmal Ihre Software aktualisieren.

Warum geben Sie die Datetime als Zeichenfolge zurück, ADO.NET kann dies jedoch sehr gut verarbeiten?

1

Verwenden Sie einen DateTime-Datentyp auf dem Client und dem Server, wenn Sie können, und Sie werden diese Probleme vollständig vermeiden. Es sollte nicht notwendig sein, das Datum als String an irgendeiner Stelle zu speichern.

Wenn das zu groß für eine Änderung in der Anwendung zu machen, explizit das Format der Datumszeichenfolge in Ihrem DateTime.ParseExact Anruf angeben:

string databaseDateFormat = "yyyy-MM-dd HH:mm:ss.fff"; 
DateTime myDate = DateTime.ParseExact(myDateString, 
             databaseDateFormat, 
             CultureInfo.InvariantCulture); 
+0

Ich habe es schon versucht. Mein Systemformat ist TT/MM/JJJJ. Format ist MM/TT/JJJJ (DatabaseDateFormat) und ich pass 30/11/1990. funktioniert nicht –

+0

Aktualisieren Sie Ihre Frage mit Ihrem Code und Beispieldaten. –

Verwandte Themen