MySQL List in CommandString?

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

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Acr0most.

    MySQL List in CommandString?

    Guten Tag, ihr werdet mich heute wohl öfters sehen.

    VB.NET-Quellcode

    1. ​cmd.CommandText = "SELECT * FROM items where id = '" & currentID & "'"
    2. con.Open()
    3. reader = cmd.ExecuteReader
    4. reader.Read()
    5. For Each i In idList
    6. currentID = i
    7. Dim buffer As Byte() = reader("name")
    8. Dim s As String = System.Text.Encoding.Default.GetString(buffer, 0, buffer.Length)
    9. namesList.Add(s)
    10. Next


    So funktioniert das nicht. Im Internet finde ich keine richtige Lösung, liegt wohl an meiner Müdigkeit. Ich möchte keinen String suchen, sondern eine Liste mit Strings. Theoretisch müsste es:

    VB.NET-Quellcode

    1. ​cmd.CommandText = "SELECT * FROM items where id = '" & idList & "'"


    heißen, aber dass ist auch schwachsinnig. Ich habe alles versucht, worüber ich bescheid weiß. Ich versuche in diesem Code, die "currentID" Variable in der for each Schleife zu ändern, aber der ExecuteCommand wird VOR der for Each Schleife definiert. Das heißt, ich kann sie nicht neudefinieren, wenn ich mich nicht irre. Wie macht man sowas? Vielleicht mit sowas wie "if reader.Read("id") = i then reader.read("name")" oder so? Uff. Eigentlich ist das so einfach, aber ich komme einfach nicht drauf.

    Ich hoffe, ihr wisst da was.

    ~blaze~: Thema verschoben
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

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

    SQL-Abfrage

    1. ​SELECT * FROM table WHERE id IN(1,2,3,4)

    ist des Rätsels Lösung ;)
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Acr0most
    Dieses "IN" könnte tatsächlich meine Lösung sein. Aber wie nutze ich dies nun in VB.net? Wenn ich & idList & nutze, dann sagt er mir, dass der "& Operator" bei Listen nicht existiert.

    @mox
    Ich möchte von jeder id(eine Liste mit ID's(idList)) den Namen herausfinden.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    @petaod
    Danke für die Hilfe.
    Ich habe nun folgendes:

    VB.NET-Quellcode

    1. Dim idsJoined As String
    2. idsJoined = idsJoined.Join("vbNewLine", idList)
    3. For Each i In idsJoined
    4. Dim buffer As Byte() = reader("name")
    5. Dim s As String = System.Text.Encoding.Default.GetString(buffer, 0, buffer.Length)
    6. namesList.Add(s)
    7. Next


    Jedoch wird die Listbox wie folgt gefüllt:

    Quellcode

    1. Setzling aus Deutschland (gross)
    2. Setzling aus Deutschland (gross)
    3. Setzling aus Deutschland (gross)
    4. Setzling aus Deutschland (gross)
    5. Setzling aus Deutschland (gross)
    6. Setzling aus Deutschland (gross)
    7. Setzling aus Deutschland (gross)
    8. Setzling aus Deutschland (gross)
    9. Setzling aus Deutschland (gross)
    10. Setzling aus Deutschland (gross)
    11. Setzling aus Deutschland (gross)
    12. Setzling aus Deutschland (gross)

    Das ist der ca. 5000ste Eintrag in der Datenbank, also hat er sich einen von mitten drinnen genommen.

    Edit:

    Ich habe mal "idJoined" ausgegeben:

    Quellcode

    1. ​1
    2. 2
    3. 3
    4. 1
    5. 5
    6. 9
    7. 2
    8. 1
    9. 7
    10. 3
    11. 2
    12. 1
    13. 5
    14. 6
    15. 2
    16. 1
    17. 5
    18. 2
    19. 5
    20. 2
    21. 3
    22. 4
    23. 9
    24. 2
    25. 3
    26. 4


    Er gibt jeder Zahl eine eigene Spalte.




    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Wieso machst du nicht 1 Select, mit dem du dir ALLE gewollten Datensätze holst. -> wäre das mit IN();

    und dann nimmst du den Reader und liest Zeilenweise das Ergebnis durch und fügst den Namen deiner Liste hinzu.

    Ansonsten setzt du für jede einzelne Id ein extra Statement ab.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Acr0most
    Ich möchte eine schnelle Variante haben. Ich habe es mir erst so vorgestellt: Ich ziehe die ganzen Einträge in einen ListString und suche den Liststring dann ab. Das Problem aber ist, dass die Datenbank später mit bis zu 500 Einträgen am Tag gefüllt wird und beginnt mit 50000 Einträgen. Ich würde das also gerne nur einmal machen. Ich glaube, dass hast du so gemeint.

    Also, die Wahrheit: Ich kann keine Liste nutzen, um beim Command mehrere Zeilen zu "meinen", richtig? Das ist nämlich, was ich gerne hätte. Das ist echt nicht so einfach wie ich dachte.

    Edit:
    Moment.. Ich mache es ja immer noch nur einmal. Ich suche dann ja den String ab. Ich versuche mal etwas.

    Edit2:

    VB.NET-Quellcode

    1. For Each i In idList
    2. If nameList.Contains(i & " ") Then
    3. MsgBox("Found")
    4. End If
    5. Next


    Ich versuche i in nameList zu finden, aber er findet nichts. Beides sind Listen, wo ist das Problem?

    Edit/
    Habe es geschafft! Danke euch!
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sekki“ ()

    Wenn du magst, kannst du gerne nochmal deinen Code zeigen, mit dem es 'geht'. Weil wenn ich dich richtig verstehe, könnte man da evtl. noch etwas optimieren.

    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Acr0most

    VB.NET-Quellcode

    1. ​For Each line In AllItemsList
    2. For Each line2 In invItemList
    3. If line.Contains(line2 & " ") Then
    4. Dim Info As String = (line)
    5. Dim Split() As String = Info.Split(" ")
    6. Dim Value0 As String = Split(0) 'ID
    7. Dim Value1 As String = Split(1) 'NAME
    8. invNamesList.Add(Value1)
    9. End If
    10. Next
    11. Next


    Du hast vollkommen Recht, denn es funktioniert anscheinend doch nicht. Irgendwas ist das falsch. Er holt mir nicht die richtigen Einträge. Deshalb versuche ich herauszufinden, wie INNER JOIN in VB.net funktioniert.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Kannst du dazu mal noch die Abfragen etc. posten, mit denen du allItemsList und invItemList holst?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup: