Oracle mit Reader auslesen und DBNull abfangen bei String-Konvertierung

  • VB.NET

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

    Oracle mit Reader auslesen und DBNull abfangen bei String-Konvertierung

    Moin

    ich lese meine Datenabfrage wie folgt aus:

    VB.NET-Quellcode

    1. dim DatumAufführung as String =""
    2. Dim reader As OracleDataReader = command.ExecuteReader()
    3. If reader.HasRows Then
    4. While reader.Read()
    5. 'ToDo: Auslesen der Daten
    6. ErrMsgDetail = "BausachenNr (0)"
    7. BausachenNr = reader(0)
    8. ErrMsgDetail = "Bausache (1)"
    9. Bausache = reader(1)
    10. ErrMsgDetail = "DatumAufführung (2)"
    11. DatumAufführung
    12. = reader(1)


    Wenn jetzt zum Beispiel bei DatumAufführung der Wert DBNull ist, dann kommt es zum Fehler.

    Ich habe eine Vielzahl von Auslesevorgängen und immer ein If.... zu machen ist sehr viel unübersichtlicher Code.

    Kann man das auch irgendwie einfacher, vielleicht in einer Sub, lösen?

    Mir fehlt die Idee dafür?

    Gruß Jan
    Moin!

    ich dachte letzte Woche schon die Lösung zu haben - aber irgendwie dann doch nicht, weil DB-Null nicht abgefangen ist.

    Nun habe ich mir folgende Funktion geschrieben als Alternative zum direkten Reader-Aufruf.

    VB.NET-Quellcode

    1. Public Function GetReaderAsString(ReadValue As System.Data.OracleClient.OracleDataReader, Index As Integer, Optional Vorgabe As String = "") As String
    2. If ReadValue.IsDBNull(Index) Then
    3. Return Vorgabe
    4. Else
    5. Return ReadValue.GetString(Index).ToString
    6. End If
    7. Return ""
    8. End Function


    Trotzdem bekomme ich die Fehlermeldung für

    VB.NET-Quellcode

    1. Return ReadValue.GetString(Index).ToString


    Wenn ich diesen Ausdruck in die Überwachung gebe bekomme ich die Meldung "Die angegebene Umwandlung ist ungültig".

    Einen Wert muss es geben. Wenn ich in die Überwachung "ReadValue(2)" eingebe, dann bekomme ich #5/20/2009# {Date} angezeigt.

    Ist mein Konvertierungsansatz falsch?

    Gruß Jan
    Nun dachte ich die Lösung gefunden zu haben mit der Anpassung:

    VB.NET-Quellcode

    1. Public Function GetReaderAsString(ReadValue As System.Data.OracleClient.OracleDataReader, Index As Integer, Optional Vorgabe As String = "") As String
    2. If ReadValue.IsDBNull(Index) Then
    3. Return Vorgabe
    4. Else
    5. If IsDate(ReadValue(Index)) = True Then
    6. Return ReadValue(Index).ToString("dd.MM.yyyy")
    7. Else
    8. Return ReadValue(Index).ToString
    9. End If
    10. End If
    11. Return ""
    12. End Function


    Aber wenn jetzt "ReadValue(0)" ausgewertet wird, dann springt die Date-Abfrage in die Konvertierung und das bringt natürlich einen Fehler.



    Kann mir das einer erklären?

    Gruß Jan

    Ergänzender Hinweis: hier wird als Wert 2009/08 angegeben. Das ist kein Datum, sondern ein Aktenzeichen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jan99“ ()