Verändert alle Datensätze der Tabelle

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von wertherchen.

    Verändert alle Datensätze der Tabelle



    Ich habe alles gemacht wie im Video und am ende ist da ein Bug drin, der verändert alle Datensätze der Tabelle.

    Kann jemand mir Helfen das zu beheben.

    Hier der Code

    VB.NET-Quellcode

    1. Private Sub button_save_Click(sender As Object, e As EventArgs) Handles button_save.Click
    2. OPEN()
    3. Try
    4. SQL = "UPDATE customer SET Name_des_Users='" & text_name.Text & "',Eindeutige_ID_des_Users='" & text_ID.Text & "',IP_Adresse='" & text_ip.Text & "',Datum_und_Uhrzeit='" & text_datum_uhrzeit.Text & "',Eindeutige_ID_des_Users='" & text_ID.Text & "',Strafpunkte='" & text_Strafpunkte.Text & "',Grund='" & RichTextBox1.Text & "',Eingetragen_von='" & text_eingetragen.Text & "'"
    5. Command.Connection = MySQL
    6. Command.CommandText = SQL
    7. Adapter.SelectCommand = Command
    8. Data = Command.ExecuteReader()
    9. Data.Close()
    10. MySQL.Close()
    11. Form1_Load(Nothing, Nothing)
    12. MsgBox("Die Daten wurden erfolgreich bearbeitet.", vbInformation, "Erfolgreich")
    13. Catch ex As Exception
    14. Timer1.Stop()
    15. MsgBox(ex.Message, vbCritical, "Fehler")
    16. End Try
    17. End Sub
    Ich nehme mal an, das in Deinem SQL-Ausdruck die WHERE-Klausel fehlt.

    Ohne die zu aktualisierenden Datensätze genauer zu spezifizieren (eben mit WHERE), wird dann jeder Datensatz aktualisiert.

    Außerdem solltest Du Dir mal SQL-Kommandos mit Parametern ansehen. Dieses zusammenbauen von einem SQL-String ist nicht so das Gelbe von Ei.

    Grüße
    wertherchen

    MISTERcRus schrieb:

    ...kannst du es bitte in meinen code einfügen?


    Nein, das kann ich nicht. Möchte Dir ja nicht das Aha-Erlebnis nehmen :)

    Aber ich kann Dir mal eine Link zur Doku schicken: dev.mysql.com/doc/refman/5.7/en/update.html.

    Danach kannst Du Dir ja dann den 2. Punkt (SQL-Kommandos mit Parametern) vornehmen. Dazu gibt es hier im Forum einiges.
    Du musst doch wissen, welchen Datensatz Du genau verändern möchtest.

    Wieso setzt Du nicht WHERE ein, um diesen bestimmten Datensatz zu selektieren?

    Anstatt gleich ein UPDATE-Kommando abzusetzen, kannst Du ja auch erstmal mit SELECT und WHERE arbeiten. So änderst Du nichts an den Daten und wenn der Ergebnisdatensatz der ist den Du verändern willst, machst Du aus dem Statement wieder ein UPDATE-Kommando.
    Ich gehe mal davon aus, dass die Programmierung hier nach dem Motto "denn sie wissen nicht, was sie tun" läuft.

    Vermutlich dürfte der Datensatz sich anhand "Eindeutige_ID_des_Users" qualifizieren.

    Wenn das Datenmodell aber auch nur einigermassen vernünftig geplant ist, muss das UPDATE-Kommando aufgrund von Datentypenverletzung auf die Schnauze fallen.
    Wenn das nicht der Fall ist, dann wirf alles weg und beginne erst mal mit vernünftigen Datentypen in der DB.
    Uhrzeiten, Strafpunkte, IDs als String zu speichern sind Kardinalsfehler.
    An IDs hat der Benutzer eh nichts verloren, die verwaltet die DB vernünftigerweise selbst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @misterus
    Du musst nicht anfangen dich mit Paramtern rumzuschlagen, auch wenn das hier immer wieder hochgehalten. Das ist eine reine Sicherheitsfrage, hat mit dem Updaten von Daten erst mal nicht zu tun.

    Aber eine WHERE Clausel muss schon sein, sonst wird eben alles geändert.
    strSQL = "UPDATE customer SET Name_des_Users='" & text_name.Text & "',Eindeutige_ID_des_Users='" & text_ID.Text & "'," & _
    " IP_Adresse='" & text_ip.Text & "',Datum_und_Uhrzeit='" & text_datum_uhrzeit.Text & "',Eindeutige_ID_des_Users='" & _text_ID.Text & "',Strafpunkte='" & text_Strafpunkte.Text & "',Grund='" & RichTextBox1.Text & "',Eingetragen_von='" & text_eingetragen.Text & "'" & _
    " WHERE DeineIDInTbl =" & ID

    Daneben fällt mir noch auf - all Deine Textfelder sind zwischen doppelten Hochkommas. Das muss nicht falsch sein, und du schreibst ja , dass der Prozess durchläuft. Aber für den Fall, dass das hier "Eindeutige_ID_des_Users", irgendwan eine Zahl ist, dann muss es so sein: " & Eindeutige_ID_des_Users & ",
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.

    mmgg schrieb:

    @misterus
    Du musst nicht anfangen dich mit Paramtern rumzuschlagen, auch wenn das hier immer wieder hochgehalten. Das ist eine reine Sicherheitsfrage, hat mit dem Updaten von Daten erst mal nicht zu tun.


    Ist das nicht schon grob fahrlässig, den Aspekt Sicherheit so zu bagatellisieren?

    Wenn Dir persönlich Sicherheit nichts bedeutet, ist das Deine Sache.. das sollte man aber dann auch nicht so kolportieren.

    Mal abgesehen davon, haben Parameter auch den Vorteil, das man sich nicht mit Hochkommata oder Anführungszeichen herum schlagen muss. Das ist ja auch immer wieder eine beliebte Fehlerquelle.
    jo - grob fahrlässige Anfänger-Verderbung.
    Muss denn jeder Anfänger alle Fehler sukzessive durchdeklinieren, die ihm bei diesem String-Gefrickel mit 100%iger Sicherheit unterlaufen werden?
    Und ist ein Programm dann in Deutschland fehlerfrei, und läuft mal auffm englischen Rechner - bäng! - die nächste Runde.
    Imo ein FehlDesign der Command-Klasse, dass String-Gefrickel überhaupt noch unterstützt wird.
    So viel nur zum Thema Stabilität, Sicherheit gegen SQL-Injection-Angriffe ist ja das nächste.

    Also kann man den Leuts nicht gleich von vornherein sagen, wie es stabil und sicher geht?

    Naja - vlt. auch nicht. Ist schon sinnvoll, wenn der TE von seim jetzigen Stand aus erstmal versucht, es ans Laufen zu kriegen.
    Anschließend dann aber DbParameter verwenden

    ErfinderDesRades schrieb:


    Muss denn jeder Anfänger alle Fehler sukzessive durchdeklinieren, die ihm bei diesem String-Gefrickel mit 100%iger Sicherheit unterlaufen werden?


    Wie sehr ist er denn ANfänger? Will er 'Profi' werden? Das weisst Du alles??

    Sicherheit? Ob es da andere Themen gibt?
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Was ist daran falsch, einem Einsteiger gleich bewährte Tipps oder Techniken mitzugeben?

    Klar kommt man per Quick und Dirty auch immer zu einem gewissen kurzfristigen Erfolg. Aber warum muss man als Einsteiger Fehler wiederholen, die ganz andere schon hinter sich haben? Das ist doch Sinn eines Forums, das man sich austauscht und Denkanstöße bekommt.

    Bei Parametern geht es übrigens nicht nur um Sicherheit (was offenbar nicht Dein Thema ist), es geht auch um das vereinfachte Zusammenbauen eines SQL-Strings - was hier ja auch schon erwähnt wurde.

    Mal eine Frage am Rande: Würdest Du auch von Strict On abraten? Weil dann ja alles so vermeintlich schnell und einfach geht?