Laden...

MySQL-Datum zu C#-Datum

Erstellt von memphis0815 vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.328 Views
M
memphis0815 Themenstarter:in
31 Beiträge seit 2006
vor 16 Jahren
MySQL-Datum zu C#-Datum

verwendetes Datenbanksystem: MySQL

Hi folks,

ich versuche ein Datum aus einer MySQL-DB auszulesen und in ein DateTime-Objekt zu parsen um Vergleiche anzustellen. Geparst wird bei mir vom String und sieht dann so aus


DateTime lastUpload = DateTime.Parse(reader[0].ToString());

Hier bekomme ich eine Fehlermeldung, dass das MySQL-DateTime-Objekt nicht zu DateTime geparst werden kann, wenn in der DB ein Wert wie "00:00:0000 00:00:00" (wurde bereits aufbereitet, kam imho als "00:00:00 - 00:00" rein) steht.

Das geht doch sicher auch eleganter bzw. fehlerunanfälliger, oder?

Viele Grüße
-f

F
171 Beiträge seit 2006
vor 16 Jahren

Hallo memphis0815,

versuch es mal mit:


reader.GetDateTime(deinspaltenindex)

Gruß falangkinjau

C
42 Beiträge seit 2007
vor 16 Jahren

Wenn man weiß, dass da ein DateTime kommt nimmt man
reader.GetDateTime(0);
Falls da null herauskommen kann muss man vielleicht ein nullable DateTime benutzen,
DateTime? dt = ....

X
40 Beiträge seit 2005
vor 16 Jahren

Original von memphis0815

Das geht doch sicher auch eleganter bzw. fehlerunanfälliger, oder?

Viele Grüße
-f

Ja, indem man solchen Unsinn erst gar nicht in die Datenbank kommen lässt -> Sql Mode 'NO_ZERO_DATE' und 'NO_ZERO_IN_DATE' aktivieren bzw. gleich Strict Mode einschalten: http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

Außerdem solltest du reader.GetDateTime() verwenden und einen Blick in die Connector/.NET-Doku werfen: http://dev.mysql.com/doc/refman/5.0/en/connector-net-using-datetime.html

X
40 Beiträge seit 2005
vor 16 Jahren

Original von falangkinjau
Hallo memphis0815,

versuch es mal mit:

  
reader.GetDateTime(deinspaltenindex)  
  

Gruß falangkinjau

Das bringt nichts, da 0000-00-00 kein gültiges Datum ist und von der DateTime-Klasse nicht akzeptiert wird.

M
memphis0815 Themenstarter:in
31 Beiträge seit 2006
vor 16 Jahren

Thx für die Tipps erstmal.

Auf die Daten in der DB habe ich leider keinen Einfluss, da sie aus einem anderen Programm kommen.

Leider haben die Ratschläge bis jetzt zu keiner Lösung geführt. Jemand noch eine Idee?

3.825 Beiträge seit 2006
vor 16 Jahren

Ich mache das so :


foreach (DataColumn col in rw.Table.Columns)
if (rw[col.ColumnName] is DBNull)
{
    if (col.DataType == typeof(System.DateTime)) rw[col.ColumnName] = new DateTime(1800, 1, 1);
}
logindate        = (DateTime)rw["usr_logindate"];
logoutdate       = (DateTime)rw["usr_logoutdate"];
...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
memphis0815 Themenstarter:in
31 Beiträge seit 2006
vor 16 Jahren

Danke Bernd. Ich probier das morgen gleich mal aus.

Gruß

X
40 Beiträge seit 2005
vor 16 Jahren

Aus dem Link den ich gepostetet habe:

24.2.5.6.4. Handling Invalid Dates

Although it is strongly recommended that you avoid the use of invalid dates within your .NET application, it is possible to use invalid dates by means of the MySqlDateTime datatype.

The MySqlDateTime datatype supports the same date values that are supported by the MySQL server. The default behavior of Connector/NET is to return a .NET DateTime object for valid date values, and return an error for invalid dates. This default can be modified to cause Connector/NET to return MySqlDateTime objects for invalid dates.

To instruct Connector/NET to return a MySqlDateTime object for invalid dates, add the following line to your connection string:

Allow Zero Datetime=True

Please note that the use of the MySqlDateTime class can still be problematic. The following are some known issues:

  1. Data binding for invalid dates can still cause errors (zero dates like 0000-00-00 do not seem to have this problem).
  2. The ToString method return a date formatted in the standard MySQL format (for example, 2005-02-23 08:50:25). This differs from the ToString behavior of the .NET DateTime class.
  3. The MySqlDateTime class supports NULL dates, while the .NET DateTime class does not. This can cause errors when trying to convert a MySQLDateTime to a DateTime if you do not check for NULL first.

Because of the known issues, the best recommendation is still to use only valid dates in your application.

Oder du probierst reader.GetString() und DateTime.TryParse.