Bestimmten Wert aus DataSet auslesen

  • VB.NET

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

    Bestimmten Wert aus DataSet auslesen

    Hallo Vb Community,

    Ich habe folgendes Problem:

    Es existiert ein DataSet (Name - myDataSet). In myDataSet befinden sich 3 Tabellen (0), (1) und (2).
    Aus Tabelle (0) lese ich einen Integerwert aus und speichere diesen in einer Integervariable zwischen.

    Nun möchte ich aus Tabelle (1) den Wert in der ersten Spalte (0) auslesen, an der Spalte (1) = Integegervariable ist

    Konkretes Beispiel
    accountid = CInt(myDataSet.Tables(0).Rows(0).Item(0).ToString)
    accountid = ???
    SQLStatement wäre wohl so (SELECT (0) FROM (1) WHERE (1)=accountid)

    über den vb.net Befehl hierfür wäre ich sehr dankbar

    Mario
    Hätte eventuell hinzufügen sollen, dass die Tabellen und die Datensätze die diese beinhalten aus einer MYSQL-Datenbank ausgelesen werden. Ich weiß nicht ob das relevant ist.

    Was der "ErfinderDesRades" in diesem Tutorial versucht zu beschreiben ist für mich leider nicht verständlich. Ich programmiere nicht sehr viel vb.net

    Ich möchte auch nicht wie in diesem Beispiel nachher ein DataGrid oder ähnliches füllen. Ich möchte lediglich Programmintern verarbeiten und dann später über eine MySqlConnection wieder in die Datenbank einspielen.
    Wie ich das anstell ist mir jedoch bekannt.
    Was genau verstehst du nicht?

    Du solltest kein DataSet zur Laufzeit erstellen, sondern vorher im Designer (wie in VierViews-Videos gezeigt ist, die da verlinkt sind). Deine Tabellen (samt Relationen untereinander) und Spalten kennst du ja von deiner MySQL-Datenbank (und auch deren Datentypen, es gibt ja Integer, String, Boolean usw) . Dann haben deine Tabellen und deren Spalten eindeutige Namen, so dass du sie ansprechen kannst.

    Aber nicht

    VB.NET-Quellcode

    1. DataSet1.Tables("BlaBla").Rows("huhu")


    Sondern

    VB.NET-Quellcode

    1. DataSet1.BlaBla.huhu


    Wenn du das gemacht hast, kannst du wieder deine Frage stellen, ich blicke nämlich nicht durch (und habe auch wenig Lust, in dieses Wirrwarr zu blicken).
    Habe das Problem selbst mit ein paar For Each schleifen und ifs auch ohne diesen ganzen unnötigen mist mit "typisierten DataSets" gelöst.

    VB.NET-Quellcode

    1. For Each row As DataRow In myDataSet.Tables(0).Rows
    2. accountid = CInt(myDataSet.Tables(0).Rows(i).Item(0).ToString)
    3. notesid = CInt(myDataSet.Tables(0).Rows(i).Item(1).ToString)
    4. For Each row2 As DataRow In myDataSet.Tables(1).Rows
    5. If CInt(myDataSet.Tables(1).Rows(e).Item(0).ToString) = accountid Then
    6. account_no = CInt(myDataSet.Tables(1).Rows(e).Item(1).ToString)
    7. End If
    8. e = e + 1
    9. Next
    10. e = 0
    11. For Each row3 As DataRow In myDataSet.Tables(2).Rows
    12. If CInt(myDataSet.Tables(2).Rows(f).Item(0)) = notesid Then
    13. myDataSet.Tables(2).Rows(f).Item(1) = CStr(account_no)
    14. End If
    15. f = f + 1
    16. Next
    17. f = 0
    18. i = i + 1
    19. Next
    20. i = 0
    21. Using con As New MySqlConnection(msqlconstr)
    22. con.Open()
    23. For Each row As DataRow In myDataSet.Tables(2).Rows
    24. Using com As New MySqlCommand("UPDATE Tabelle SET cf_account_no=" & CInt(myDataSet.Tables(2).Rows(i).Item(1).ToString) & " WHERE notesid=" & CInt(myDataSet.Tables(2).Rows(i).Item(0).ToString), con)
    25. com.ExecuteNonQuery()
    26. i = i + 1
    27. End Using
    28. Next
    29. End Using


    und das thema war erledigt
    ohne diesen ganzen unnötigen mist mit "typisierten DataSets" gelöst


    Dann isses ja (so hart es klingt) eh nicht wert das man dir weiter hilft...
    bzw. kommst du so stur rüber das du es eh nicht verstehen würdest warum, der Tipp hatte nämlich schon seinen Sinn und wäre nicht schwer zu verstehen gewesen ;)
    Wenn ich mir das so ansehe stehst du eh bald wieder auf der Matte weils nicht so ganz klappt ;)
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Funktionstüchtiger Code ist MEINES ERACHTENS schon ein hoher Qualitätsstandard. Ob ich jetzt jede schon fast "religiöse" richtlinie runterbete oder nicht ist in meinen Augen allerhöchstens eine formele Sache zur leserlichkeit des Codes. Da das programm jedoch ein einweg importprogramm ist und nicht noch einmal benötigt wird, ist hier nur die funktionalität interessant. Das sollte so nebenbei keineswegs ein Angriff auf dich sonne75 sein! War vielleicht etwas forsch und unglücklich ausgedrückt. Möchte mich an dieser Stelle bei dir entschuldigen.
    Der Code muss nicht nur funktionieren, sondern auch wartbar sein, dafür muss er leserlich sein. Mit deinen Tables(0).Rows(1) blickst du nach paar Wochen schon nicht mehr durch, weil es nicht selbsterklärend ist, wie es mit den Namen wäre. Zudem ist es sehr fehleranfällig, ruckzuck hat man sich vertippt. Mit den Namen kann es nicht so leicht passieren...

    Fictionizer schrieb:

    War vielleicht etwas forsch und unglücklich ausgedrückt.


    Danke, dass du es revidierst, macht nicht jeder. :thumbup:

    Fictionizer schrieb:

    Möchte mich an dieser Stelle bei dir entschuldigen.


    Ist angenommen.