Mysql SELECT * FROM ...

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von dominik2001.

    Mysql SELECT * FROM ...

    Hi,

    wenn ich mit

    C-Quellcode

    1. Dim result As MySqlLib.ResultCollection = db.Query("SELECT * FROM `Einsaetze` WHERE `FS` ='" & Label5.Text & "' ORDER BY `Nummer` DESC LIMIT 1")
    2. Dim nummer As Integer = CInt(result.Row(0).Column("Nummer").ToString)

    Daten aus der DB auslese und in eine Textbox schreibe, müsste mir doch eigentlich die größte Zahl angezeigt werden, da ich es ja mit DESC LIMIT 1 mache. Funktioniert auch ganz gut, nur lässt er irgendwie bei zweistelligen Zahlen die zweite Zahl weg, und orientiert sich an der Ersten.

    Beispiel:
    - Die Nummern 1-7 sind vertreten. Es wird mir 7 angezigt - passt
    - Die Nummer 1-7 und die Zahl 20. Es wird mir 7 angezeigt - da 2 kleiner als 7 ist und er die 0 nicht beachtet
    - Nummer 1-7 und 50. Das gleiche wie bei der 20
    - ...

    Was mach ich falsch?
    Deine Nummer scheint wohl als Text deklariert zu sein.
    Damit sortierst du Text, und das ist 7 nun mal größer als 20 oder 50 oder auch 1234656878722.
    Du musst numerisch sortieren.
    ... ORDER BY CAST(`Nummer` AS INTEGER) ...

    In einem vernünftigen Datenmodell wäre die Spalte gar nicht als Text ausgelegt, wenn sie Zahlen beinhaltet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich hoffe für dich, das Label5.Text nicht vom User beliebig geändert werden kann.
    SQL Injection lässt grüßen ;)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    In der Regel nicht, aber wer weiß, woher dieser Text wirklich kommt. Daher vernünftig validieren, @dominik2001, denn wenn FS mal "Test;DROP DATABASE ..." ist, dann war's das. Zudem sollte man Labels nur zu Anzeige verwenden, aber nicht mit ihnen Daten verarbeiten, sodass Du lieber eine Variable nehmen solltest.
    Evtl. auch noch wichtig: Sicherheit: Gefahrenquelle Quellcode

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich hoffe für dich, das Label5.Text nicht vom User beliebig geändert werden kann.
    SQL Injection lässt grüßen ;)


    Nein, Label5 kann nicht geändert werden. Sollte der User es trotzdem irgendwie schaffen, wäre es mir auch egal, da es ihm nix bringen würde.

    In der Regel nicht, aber wer weiß, woher dieser Text wirklich kommt. Daher vernünftig validieren, @dominik2001, denn wenn FS mal "Test;DROP DATABASE ..." ist, dann war's das. Zudem sollte man Labels nur zu Anzeige verwenden, aber nicht mit ihnen Daten verarbeiten, sodass Du lieber eine Variable nehmen solltest.
    Evtl. auch noch wichtig: Sicherheit: Gefahrenquelle Quellcode

    Grüße


    Danke für den Hinweis