Überprüfen ob Wert DbNull ist

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.

    Überprüfen ob Wert DbNull ist

    Moin,

    ich stelle derzeit einige Funktionen um, um endlich vom Microsoft.Visualbasic los zu kommen.
    Dabei bin ich jetzt bei IsDBNull angekommen.

    Hier mal ein Auszug meiner Funktion

    VB.NET-Quellcode

    1. Public Shared Function GetValue(ByVal Row As DataRow,
    2. ByVal ColumnName As String,
    3. ByVal ErrorValue As Date) As Date
    4. UsingCount += 1
    5. Const CurrentFunction As String = NameOf(XData) & "." & NameOf(GetValue) & "_" & "Date"
    6. If Row Is Nothing Then Return ErrorValue
    7. If ColumnName = Nothing Then Return ErrorValue
    8. If Not Row.Table.Columns.Contains(ColumnName) Then
    9. MessageBox.Show("Die Spalte " & Cnst.Escape & ColumnName & Cnst.Escape & " ist in der angegebenen " & "DataRow" & " nicht vorhanden.", CurrentFunction, MessageBoxButtons.OK, MessageBoxIcon.Error)
    10. Return ErrorValue
    11. End If
    12. 'Neu
    13. If DBNull.Value.Equals(Row.Item(ColumnName)) Then
    14. Return ErrorValue
    15. Else
    16. Return Date.Parse(Row.Item(ColumnName).ToString)
    17. End If
    18. 'Alt
    19. If IsDBNull(Row.Item(ColumnName)) Then
    20. Return ErrorValue
    21. Else
    22. Return CType(Row.Item(ColumnName), Date)
    23. End If
    24. End Function


    Oft kommt es vor, dass aus der Datenbank geladene Daten Null Werte beinhalten, wodurch es beim einfachen Einlesen über ...

    Visual Basic-Quellcode

    1. Return Row.Item(ColumnName)


    ... knallt, wenn kein Datum im Feld steht. Darum die Funktion, welche bei Null Werten zumindest einen Standardwert zurückgibt.
    Diese Funktion habe ich mir für alle möglichen Datentypen erstellt, nicht nur Date.

    Die Frage wäre jetzt, da dass IsDBNull rausfliegt, ob der Weg über DBNull.Value.Equals(...) richtig ist, oder ob es da einen Besseren gibt?

    Freundliche Grüße und ein schönes Wochenende :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Wenn es seine Arbeit macht, wäre das an sich erstmal richtig. Nur stellt sich die Frage: Die DataTable der Row ist wie definiert? Erzeugst Du die in nem tDS-Designer, wo Du auch ganz bequem festlegen kannst, was passiert, wenn DBNull in der DataTable ankommt oder erstellst Du die selber im Code? Sieht nach Antwort B aus. Dann wäre der von Dir eingeschlagene Weg möglich. Oder Du überprüfst gleich nach dem Laden der Daten, ob irgendwo DBNull drinsteht und setzt ggf. dort sinnvolle Werte ein.

    btw: Die Angabe ByVal bei den Funktionsparametern ist überflüssig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Die Datenbank, bzw. Tabellen erstelle ich über den Code als SQL Query, je nach Anwendung sind es MSSQL, MySQL oder Oledb.
    Für Anbindung der Datenbank über ein im Programm erstelltes, typisiertes, Dataset konnte ich mich bisher nicht durchringen, weil es für mich so einfacher ist.
    Ob DbNull in der DataTable bei der jeweiligen Spalte ankommt, ist primär egal, es sei denn meine Datenbank sagt, ich will Standardwerte. Dann kommen auch Werte rein.

    Primär geht es mir um VarChar bzw. NVarChar Felder, die nach dem Erstellen des Datensatzes sinnvollerweise Null enthalten können.

    ByVal schreibe ich aus Gewohnheit mit rein, könnte aber im Zuge der Überarbeitung der Funktionen mit rausfliegen.
    Eine ähnliche Frage hatte ich auch einmal vor Jahren...
    IsDBNull eine böse Funktion?

    BlueLagoonX schrieb:

    Für Anbindung der Datenbank über ein im Programm erstelltes, typisiertes, Dataset konnte ich mich bisher nicht durchringen
    Solltest du aber versuchen...

    BlueLagoonX schrieb:

    , die nach dem Erstellen des Datensatzes sinnvollerweise Null enthalten können.
    Einfach die DataRow-Klasse im ObjectBrowser mal durchgugge - wenn du momenmtan nicht ganz in Blindheit geschlagen bist, sollteste deinen Froind da finden ;) .
    (auf wunsch sag ich auch vor - aber is unsportlich)
    Da brat mir doch einer nen Storch, im DataRow Objekt gibt's die IsNull Funktion. Soweit prima.
    Allerdings verwende ich meine GetValue Funktion auch mit DataGridViewRows, hätte ich vielleicht dabei sagen sollen.

    VB.NET-Quellcode

    1. ​Public Shared Function GetValue(ByVal Row As DataGridViewRow ...


    Im DataGridViewRow Objekt finde ich leider keine Möglichkeit, den Zellenwert auf Null abzufragen, oder ich übersehe es (ebenfalls).

    Visual Basic-Quellcode

    1. ​If Row.Cells(ColumnName).Value Is DBNull.Value Then


    Sollte es aber auch tun denke ich.

    BlueLagoonX schrieb:

    Da brat mir doch einer nen Storch, im …

    Allerdings verwende ich meine GetValue Funktion auch mit DataGridViewRows, hätte ich vielleicht dabei sagen sollen.
    ...


    Die Funktion verwende ich mit x Überlagerungen, womit ich sie zum Überprüfen von Zellwerten für DataRow als auch DataGridViewRows verwende. :)
    Wie gesagt, ich hätte es eigentlich dabei sagen müssen, dass ich sie für beides verwende.

    Kurzum, mit Is DBNull.Value geht's für die DGVRows auch. Bei DataRows nehm ich jetzt .IsNull.