Oracle - Problem mit Auslesen eines DateTime und Konvertierung nach String

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Oracle - Problem mit Auslesen eines DateTime und Konvertierung nach String

    Moin!

    ich lese eine Oracle-DB aus und möchte abhängig vom Datentyp eine Formatierung vornehmen.

    Hier zunächste der aktuelle Code:

    VB.NET-Quellcode

    1. Private Function ConvertOraReaderToDict(reader As OracleDataReader, Optional FormatDate As String = "dd.MM.yyyy") As Dictionary(Of String, String)
    2. Dim Result As New Dictionary(Of String, String)
    3. Dim ValueTemplate As String = "????"
    4. If reader.HasRows = False Then Return Result
    5. For RecordCount = 0 To reader.FieldCount - 1
    6. Dim Wert As String = ""
    7. Dim DataType As Type = reader.GetFieldType(RecordCount)
    8. Dim DataName As String = reader.GetName(RecordCount).ToUpper
    9. If IsDBNull(reader(RecordCount)) Then ' Leeres Datenfeld
    10. If Result.ContainsKey(DataName) = False Then
    11. Result.Add(DataName, ValueTemplate)
    12. Else
    13. Console.WriteLine(String.Format("Fehler beim Auslesen von Ora-Daten ({0})", DataName))
    14. End If
    15. Else ' mit Wert belegt
    16. Select Case DataType.Name.ToUpper
    17. Case "DECIMAL"
    18. Wert = reader(RecordCount).ToString
    19. Case "DATETIME"
    20. Wert = reader(RecordCount).ToString(FormatDate)
    21. Case "STRING"
    22. Wert = reader(RecordCount).ToString
    23. Case Else
    24. Console.WriteLine(String.Format("WARNING unberücksichtigter Dateityp ({0})", DataType.Name.ToUpper))
    25. Wert = reader(RecordCount).ToString
    26. End Select
    27. If Result.ContainsKey(DataName) = False Then
    28. Result.Add(DataName, Wert)
    29. Else
    30. Console.WriteLine(String.Format("Fehler beim Auslesen von Ora-Daten ({0})", DataName))
    31. End If
    32. End If
    33. Next
    34. Return Result
    35. End Function


    Wird ein Feld mit DEZIMAL ausgewertet, dann funktioniert das.

    Nun habe ich aber ein datetime-Fled, dann kommt es zu folgender Fehlermeldung:

    'reader(RecordCount).ToString(FormatDate)' threw an exception of type 'System.InvalidCastException'



    hier noch die Werte



    Es müsste doch eine ToString-Konvertierung möglich sein oder habe ich einen Gedankenfehler.

    Kann mir einer weiterhelfen?
    Und welchen Wert hat reader(RecordCount) an dieser Stelle zum Beispiel? Dann kannst Du nämlich in Deinem Code einfach als Testzeile ausprobieren: Dim Datum = Rohwert.ToString("dd.MM.yyyy") Und musst nicht nach dem Fehler in der komplexen Sub suchen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Achso, naja, der Wert ist ja nicht vom Typ System.DateTime, sondern vom Typ OracleDateTime. Und der hat keine ToString-Methode mit Parameter. Demenstsprechend musst Du wohl erst eine Konvertierung zu System.DateTime vornehmen. Also z.B.

    VB.NET-Quellcode

    1. Dim DeinWertAlsSystemDateTime = CDate(reader(RecordCount))
    2. Wert = DeinWertAlsSystemDateTime.ToString(FormatDate)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin1

    also, dass verstehe ich nun gar nicht. Aber sei es drum.

    Aber wie mache ich diese Konvertierung?

    Hier meine Versuche, die alle mit Fehlermeldungen enden:

    VB.NET-Quellcode

    1. Case "DATETIME"
    2. Dim test1 As System.DateTime = CType(System.DateTime, reader(RecordCount))
    3. Dim test As Object = reader(RecordCount)
    4. Dim test2 As System.DateTime = CType(System.DateTime, test)
    5. Wert = reader(RecordCount).ToString(FormatDate)





    ????

    Gruß Jan
    Zum einen: Warum verstehst Du das nicht? Die OracleDB bzw. der Reader liefern ein OracleDateTime zurück. Steht ja in der Debuggerausgabe. Du brauchst aber ein System.DateTime. Nur weil der Wert gleich aussieht, ist es das für den Compiler ab er nicht. Daher ist die Konvertierung nötig.
    Zum anderen verwendest Du CType falsch. Die Syntax ist: CType(DeinWert, DerZieltyp). Du versuchst es aber umgedreht. Und zusätzlich hab ich bereits ein Codebeispiel im Vorpost gebracht.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.