New to VB.net -> Probleme mit Dataset/Datatable und Schleife zum Daten ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    New to VB.net -> Probleme mit Dataset/Datatable und Schleife zum Daten ändern

    Hallo!
    Bis vor kurzem habe ich noch komplett auf VB6 Programmiert.
    Jetzt schreib ich meine erste App mit .NET.

    Ich hole die Daten aus einem XLS in ein Dataset und gebe die Dataset.table in ein Datatable.
    Ich kann mittels Schleife aber leider keine Daten im Dataset oder Datatable ändern.

    Fehlermeldung: Ungültige Konvertierung von Tyb DBnull in Typ String.

    VB.NET-Quellcode

    1. Try
    2. Dim MyConnection As System.Data.OleDb.OleDbConnection
    3. Dim dataSet As System.Data.DataSet
    4. Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    5. MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sfile + ";Extended Properties=Excel 12.0;")
    6. MyCommand = New System.Data.OleDb.OleDbDataAdapter("select Titel,Autor,XXX1,XXX2, Prozentsatz,XXX3,XXX4,Waehrung,InEUR,Wechselkurs,AnteilVerlag from [Berichte$] where XXX4 IS NOT NULL", MyConnection)
    7. dataSet = New System.Data.DataSet
    8. MyCommand.Fill(dataSet)
    9. Dim DT As System.Data.DataTable
    10. DT = dataSet.Tables(0)
    11. 'Hier fängt der Problem Teil an:
    12. Dim crow As DataRow
    13. For Each crow In DT.Rows
    14. If crow("Autor") Like "*Markus*" Then crow("AnteilVerlag") = 0
    15. Next crow
    16. DataGridView1.DataSource = DT
    17. MyConnection.Close()
    18. Catch ex As Exception
    19. MsgBox(ex.Message.ToString)
    20. End Try


    Danke für Eure Hilfe!

    ebk schrieb:

    Hi,

    Then crow("AnteilVerlag") = 0

    ist 'AnteilVerlag' vom Datentyp String ?


    Wie kann ich den Datentyp der Spalte ändern?
    Ich könnte zum testen auch ein String eintragen das ist egal..

    ErfinderDesRades schrieb:

    ich denke eher, crow("Autor") ist nicht gesetzt, also Dbnull.
    Wenn man das dan Liken will, stellt das eine ungültige Konvertierung von DbNull nach String dar.


    Heißt wenn ich die zahl der Spalte eintrage ist das Problem gelöst?
    Ich könnte bei OleDbConnection im Extended aber auch Reinschreiben das er die erste Zeile als Spaltenname nehmen soll, dann sollte das gehen oder?

    Danke!
    DbNull heißt für mich etwas ist leer bzw. ein Wert fehlt.

    VB.NET-Quellcode

    1. Dim crow As DataRow
    2. For Each crow In DT.Rows
    3. If crow("2") Like "*Markus*" Then crow(17) = "test"
    4. Next crow


    Der Code funktioniert auch nicht selber Fehler wie vorher.

    Anscheinend kann ich die Fehlermeldung nicht interpretieren.
    was sich mir nicht erschließt ist welcher Wert fehlt.
    In Spalte 2 gibt es Werte(auch wenn nicht in allen Zeilen), Spalte 17 ist leer und da soll etwas eingefügt werden.



    Danke für All die Hilfe bisher!

    VB.NET-Quellcode

    1. Private Sub SetAnteile0(tbl As DataTable)
    2. For Each rw As DataRow In tbl.Rows
    3. If rw.IsNull("Autor") Then Continue For ' verhindert, dass bei DbNull die nächste Zeile erreicht wird, denn rw("Autor") darf dann nicht abgerufen werden
    4. If rw("Autor").ToString Like "*Markus*" Then rw("AnteilVerlag") = 0
    5. Next
    6. End Sub

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. Private Sub SetAnteile0(tbl As DataTable)
    2. For Each rw As DataRow In tbl.Rows
    3. If rw.IsNull("Autor") Then Continue For ' verhindert, dass bei DbNull die nächste Zeile erreicht wird, denn rw("Autor") darf dann nicht abgerufen werden
    4. If rw("Autor").ToString Like "*Markus*" Then rw("AnteilVerlag") = 0
    5. Next
    6. End Sub



    Danke, genau das wars!
    Jetzt hab ichs verstanden!
    Wenn die letzte Spalte ein Double Typ ist wie könnte ich sie zb. auf String umstellen?