Updaten geht nicht

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Patrick1993.

    Updaten geht nicht

    Hallo Leute,
    Ich bin gerade an einem Benutzersystem die Update funktion am schreiben.
    Beim Debuggen bringt er mir folgende fehlermeldung
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

    in diesem code:

    VB.NET-Quellcode

    1. Private Sub btn_fertig_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_fertig.Click
    2. Verbindung()
    3. cmd.CommandText = "UPDATE Benutzer SET Benutzername = '" & txtbenutzer.Text & "', Name = '" & txtName.Text & "', ICQ = '" & txtICQ.Text &
    4. "',Email = '" & txtEmail.Text & "',Wache = '" & txtWache.Text & "' WHERE ID = " & "ID = '" & frm_Benuzter.My_List(0) & "')"
    5. cmd.ExecuteNonQuery()
    6. con.Close()
    7. End Sub


    Doch irgendwie finde ich den fehler nicht so ganz.

    Ich habe auch schon versucht das

    VB.NET-Quellcode

    1. WHERE ID = " & "ID = '" & frm_Benuzter.My_List(0) & "')"
    zu

    VB.NET-Quellcode

    1. WHERE ID = " & frm_Benuzter.My_List(0) & "')"


    zu ändern. Kein erfolg

    Siehe anhang oder
    Hier


    *EDIT*
    Die Messagebox und das Exit Sub sind überflüssig

    Ich mein den CommandText as in wenn der Text der TextBoxen schon eingefügt ist:

    VB.NET-Quellcode

    1. cmd.CommandText = ...
    2. MessageBox.Show(cmd.CommandText)
    Dachte du meintest es so wie oben in meinem Post.
    Nun sieht's so aus:

    Das ganze kann man unterbinden in dem man DB-Parameter verwendet.
    Es gestaltet sich das ganze übersichtlicher.

    VB.NET-Quellcode

    1. cmd.CommandText = "UPDATE Benutzer SET Benutzername = '@benutzername', Name = '@name', ICQ = '@icq', " & _
    2. "Email = '........."
    3. cmd.Parameters("@benutzername", String).Value = txtbenutzer.Text
    4. cmd.Parameters("@name", String).Value = txtName.Text
    5. cmd.Parameters("@icq", Int).Value = txtICQ.Text
    6. '.....
    7. cmd.ExecuteNonQuery()


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Das ganze kann man unterbinden in dem man DB-Parameter verwendet.

    Mit der art und weise komme ich schonmal garnicht zurecht.

    da er mir direkt 12 Fehlermeldungen ausspuckt:
    Alle haben den gleichen Code:

    VB.NET-Quellcode

    1. cmd.Parameters("@benutzername", String).Value = txtbenutzer.Text
    2. cmd.Parameters("@passwort", String).Value = txtpasswort.text
    3. cmd.Parameters("@name", String).Value = txtName.Text
    4. cmd.Parameters("@email",String).Value = txtEmail.text
    5. cmd.Parameters("@wache",String).Value = txtwache.text

    Fehlermeldung:
    String ist kein Klassentyp und kann nicht verwendet werden
    "." erwartet
    Weitere Fehlermeldungen sind hier:

    VB.NET-Quellcode

    1. cmd.Parameters("@icq", CInt).Value = txtICQ.Text

    Dort erwatet er irgendwo eine Klammer

    Und wenn ich das ganze in

    VB.NET-Quellcode

    1. cmd.CommandText = "UPDATE Benutzer SET Benutzername = '@benutzername', Name = '@name', ICQ = '@icq', " & _
    2. "Email = '@email',Passwort='@passwort',Wache='@wache'"
    3. cmd.Parameters("@benutzername".ToString).Value = txtbenutzer.Text
    4. cmd.Parameters("@passwort".ToString).Value = txtPasswort.Text
    5. cmd.Parameters("@name".ToString).Value = txtName.Text
    6. cmd.Parameters("@icq".ToString).Value = txtICQ.Text
    7. cmd.Parameters("@email".ToString).Value = txtEmail.Text
    8. cmd.Parameters("@wache".ToString).Value = txtWache.Text


    umbaue, findet er @benutzername nicht in der colection

    Hab ich ihm schon gesagt...
    Patrick, probier es stattdessen damit:

    VB.NET-Quellcode

    1. cmd.Parameters("@benutzername", String.GetType()).Value = ...
    Das mit dem hochkomma hat nicht geklappt.

    Bei mir erkennt er irgendwie das GetType nicht.

    das war kein C&P Code von mir.
    Ich hab den genauen Wortlaut nicht im Kopf.
    ....

    So hier.
    msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
    msdn.microsoft.com/en-us/library/h8f14f0z.aspx

    lg

    EDIT:

    VB.NET-Quellcode

    1. cmd.CommandText = "UPDATE Benutzer SET Benutzername = '@benutzername', Name = '@name', ICQ = '@icq', " & _
    2. "Email = '........."
    3. cmd.Parameters("@benutzername", SqlDbType.Varchar).Value = txtbenutzer.Text
    4. cmd.Parameters("@name", SqlDbType.Varchar).Value = txtName.Text
    5. cmd.Parameters("@icq", SqlDbType.Int).Value = txtICQ.Text
    6. '.....
    7. cmd.ExecuteNonQuery()


    so "MÜSSTE" es klappen

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    das war kein C&P Code von mir.

    war mir klar das es kein C&P war.

    Doch irgendwie frisst mein VB die ganzen Parametergeschichten nicht.

    Denn immer wenn ich was neues schreibe (nachdem ich msdn gelesen habe) spukt er mir neue fehlermeldungen aus und ich kann noch und noch soviel an dem code änder.

    Ups sry hatte vergessen sie zu posten.
    Nun aber.
    Fehler bei der Überladungsauflösung da keine zugrifbare "Item" diese anzahl der argumenten Akzeptiert.

    *GAAAANZ GROSSES EDIT':*
    Fehler behoben

    Der Fehler war die Klammer.
    Danke an haiyyu für den Tipp

    Richtiger Code sieht so aus:

    VB.NET-Quellcode

    1. cmd.CommandText = "UPDATE Benutzer SET Benutzername = '" & txtbenutzer.Text & "', Passwort= '" & txtPasswort.Text & "', Name= '" &
    2. txtName.Text & "' , ICQ= '" & txtICQ.Text & "',Wache='" &
    3. txtWache.Text & "' where ID = " & frm_Benuzter.My_List(0) 'hier war eine klammer die nich dahin sollte
    4. cmd.ExecuteNonQuery


    Somit were auch der fehler von fichz gelöst. Dort hatte ich auch die klammer die nun nicht mehr da ist.

    Das mit dem Parametern werde ich mir mal näher nehmen wenn ich ein wenig mehr erfahrung bzw Pratische Übung habe

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

    Ich würde dir trotzdem Nahe legen, das mit den Parametern bei DB Abfragen vorzuziehen.
    Es macht den Code vielleicht länger (nach unten hin) aber es ist um Welten (!) übersichtlicher.

    Dein Command.Text besteht jetzt schon aus 3 Zeilen.
    Manche Statements haben aber über 15 Zeilen und 20 oder mehr Parameter.

    Das in einer Wurscht zu schreiben und ohne dabei einen Fehler zu produzieren, ist dann fast unmöglich.

    Mach dir sonst eventuell eine kleine Tabelle mit 3-4 Spalten und üb das.
    Es lohnt sicht.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Ich würde dir trotzdem Nahe legen, das mit den Parametern bei DB Abfragen vorzuziehen.

    Wie ich schon sagte ich werde es mir mal aneigenen wenn dies besser ist