DBNull.value Ungültige Konvertierung von Typ DBNull in Typ String.

  • VB.NET
  • .NET (FX) 4.0

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

    DBNull.value Ungültige Konvertierung von Typ DBNull in Typ String.

    Hallo Ihrs :)

    Trotz Suchen in Google und diesem Forum selbst habe ich (noch) keine Antwort gefunden.

    Im Projekt wird eine SQLite Datenbank anhand des ausgewählten Knotens in einem TreeView angezeigt.

    Es sollen alle darunterliegenden Komponenten angezeigt werden.

    Aufgrund dessen sind die Variablen wie Values(2) usw. je nach Auswahl auch mal leer.
    Das Ziel ist es, die Parameter in der Abfrage dann nicht zu berücksichtigen.

    Die Abfrage speist ein DataGridView.
    Jedoch ist das Problem, dass ich keine "WildCards" setzen kann, in denen die Filter ignoriert werden.

    Fehlermeldung: InvalidCastException wurde nicht behandelt.
    Ungültige Konvertierung von Typ DBNull in Typ String.

    was ist mein Denkfehler?

    Die betroffene Abfrage ist:

    SQL-Abfrage

    1. SELECT ID, Projekt, Standort, Gewerk, Anlagenbereich, Komponente, Angelegt, Liefertermin, Abgeschlossen, Mehrkosten, Stunden, [KON-Start], [KON-Ende], [SIM-Start],
    2. [SIM-Ende], [DTL-Start], [DTL-Ende], [KTR-Start], [KTR-ENDE], Geliefert
    3. FROM Komponenten
    4. WHERE (Projekt = @Param1) AND (Standort = @Param2) AND (Gewerk = @Param3) AND (Anlagenbereich = @Param4) AND (Komponente = @Param5)


    VB.NET-Quellcode

    1. Private Sub ProjectTreeView_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles ProjectTreeView.AfterSelect
    2. Dim value() = ProjectTreeView.SelectedNode.FullPath.Split("\")
    3. Dim values(5)
    4. For n = 1 To UBound(value)
    5. values(n) = value(n)
    6. Next
    7. Me.KomponentenTableAdapter.FillBySelTreeNode(Me.DBDataSet.Komponenten, IIf(values(1) <> "", values(1), DBNull.Value), _
    8. IIf(values(2) <> "", values(2), DBNull.Value), _
    9. IIf(values(3) <> "", values(3), DBNull.Value), _
    10. IIf(values(4) <> "", values(4), DBNull.Value), _
    11. IIf(values(5) <> "", values(5), DBNull.Value))
    12. End Sub
    Du hast die Inline-Ifs. Die Methode FillBySelTreeNode scheint als zweite Parameter ein Param String-Array zu erwarten. Wenn jetzt die Bedingung in den Ifs true ist, dann wird auch ein String zurückgegeben (values(xy)) aber wenn nicht, dann wird DBNull.Value zurückgegeben, was vom Typ DBNull ist. Geht nicht :D
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    FillBySelTreeNode scheint als zweite Parameter ein Param String-Array zu erwarten


    Die gefilterten Spalten sind Textfelder.
    Das Problem ist, dass
    Aufgrunddessen kann nicht nach dbnull.value gesucht werden.
    An einer anderen Stelle im Projekt hatte diese Methode einwandfrei geklappt.

    Wie kann ich dann mit einer Abfrage alle 5 Ebenen erschlagen, die ausgewählt werden können?
    Ein Wildcard - Parameter, oder ähnliches wäre genial.
    (wie im Windows - Explorer das Zeichen *)



    Option Strict On!
    Und das: vb-paradise.de/allgemeines/tip…euen-vb-net-alternativen/

    Du kannst bei der WHERE-Klausel das machen:

    SQL-Abfrage

    1. WHERE
    2. (@Param1 = "" OR Projekt = @Param1) AND (@Param2 = "" OR Standort = @Param2) ... und so weiter

    Wenn z.B. Param2 (sehr aussagekräftiger Name übrigens) leer ist, dann ergibt die Klammer automatisch True und die Bedingung nach dem OR wird quasi ignoriert.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils