Fehler bei "UPDATE"

  • Allgemein

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Merio.

    Fehler bei "UPDATE"

    Hi Comm,

    ich habe eine Tabelle namens accounts, in der die Spalten ID, Username, Password, EMail, Serial und Banned existieren.

    Wenn ich diesen Befehl ausführen will, kommt immer "Der Benutzer konnte nicht gefunden werden!"

    VB.NET-Quellcode

    1. Public Sub BanAccount(ByVal username As String)
    2. Try
    3. conn = New MySqlConnection(String.Format("Server='{0}';Uid='{1}';Pwd='{2}';Database='{3}';Port='{4}';", ToolStripTextBox5.Text, ToolStripTextBox4.Text, ToolStripTextBox3.Text, _
    4. ToolStripTextBox2.Text, ToolStripTextBox1.Text))
    5. Catch ex As Exception
    6. MsgBox("Fehler:" & vbNewLine & ex.Message.ToString, MsgBoxStyle.Critical)
    7. End Try
    8. If conn.State = ConnectionState.Open Then
    9. conn.Close()
    10. End If
    11. Try
    12. conn.Open()
    13. Catch myerror As MySqlException
    14. MsgBox("Keine Verbindung zur Datenbank!", MsgBoxStyle.Exclamation)
    15. conn.Close()
    16. Exit Sub
    17. End Try
    18. Try
    19. Dim myAdapter As New MySqlDataAdapter
    20. Dim SQLAbfrage As String = String.Format("SELECT * FROM accounts WHERE Username='{0}';", username)
    21. Dim myCommand As New MySqlCommand
    22. myCommand.Connection = conn
    23. myCommand.CommandText = SQLAbfrage
    24. myAdapter.SelectCommand = myCommand
    25. Dim myData As MySqlDataReader
    26. myData = myCommand.ExecuteReader()
    27. If myData.HasRows = 1 Then
    28. conn.Close()
    29. conn.Open()
    30. Dim registerfinal As New MySqlDataAdapter
    31. myCommand.CommandText = "UPDATE accounts SET Banned = 1 WHERE Username = " & username & ";"
    32. myCommand.ExecuteNonQuery()
    33. MsgBox("Der Account " & username & " wurde gebannt.", MsgBoxStyle.Information)
    34. Else
    35. MsgBox("Der Benutzer konnte nicht gefunden werden!", MsgBoxStyle.Exclamation)
    36. End If
    37. conn.Close()
    38. Catch mysqlex As MySqlException
    39. MsgBox(mysqlex.Message.ToString, MsgBoxStyle.Exclamation)
    40. Catch ex As Exception
    41. MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation)
    42. End Try
    43. End Sub


    Hoffe jemand kann mir helfen.
    LG
    Merio
    So funktioniert's:

    VB.NET-Quellcode

    1. Public Sub BanAccount(ByVal Username As String)
    2. Try
    3. conn = New MySqlConnection(String.Format("Server='{0}';Uid='{1}';Pwd='{2}';Database='{3}';Port='{4}';", ToolStripTextBox5.Text, ToolStripTextBox4.Text, ToolStripTextBox3.Text, _
    4. ToolStripTextBox2.Text, ToolStripTextBox1.Text))
    5. Catch ex As Exception
    6. MsgBox("Fehler:" & vbNewLine & ex.Message.ToString, MsgBoxStyle.Critical)
    7. End Try
    8. If conn.State = ConnectionState.Open Then
    9. conn.Close()
    10. End If
    11. Try
    12. conn.Open()
    13. Catch myerror As MySqlException
    14. MsgBox("Keine Verbindung zur Datenbank!", MsgBoxStyle.Exclamation)
    15. conn.Close()
    16. Exit Sub
    17. End Try
    18. Try
    19. Dim myAdapter As New MySqlDataAdapter
    20. Dim SQLAbfrage As String = String.Format("SELECT * FROM accounts WHERE Username='{0}';", Username)
    21. Dim myCommand As New MySqlCommand
    22. myCommand.Connection = conn
    23. myCommand.CommandText = SQLAbfrage
    24. myAdapter.SelectCommand = myCommand
    25. Dim myData As MySqlDataReader
    26. myData = myCommand.ExecuteReader()
    27. myData.Read()
    28. If myData.HasRows Then
    29. conn.Close()
    30. conn.Open()
    31. Dim registerfinal As New MySqlDataAdapter
    32. myCommand.CommandText = "UPDATE accounts SET Banned = '1' WHERE Username ='" & Username & "';"
    33. myCommand.ExecuteNonQuery()
    34. MsgBox("Der Account " & Username & " wurde gebannt.", MsgBoxStyle.Information)
    35. Else
    36. MsgBox("Der Benutzer konnte nicht gefunden werden!", MsgBoxStyle.Exclamation)
    37. End If
    38. conn.Close()
    39. Catch mysqlex As MySqlException
    40. MsgBox(mysqlex.Message.ToString, MsgBoxStyle.Exclamation)
    41. Catch ex As Exception
    42. MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation)
    43. End Try



    Man muss die Werte in Anführungsstriche setzen :D
    LG
    Merio
    Als erstes mal ist das Thema ja eigl. schon erledigt @ErfinderDesRades... Also Funktioniert es ja so doch. Da wenn Option Strict nicht on ist die eins in ein true umgewandelt wird... Trotz alledem ist es sehr unsauber die Abfrage so zu gestalten...

    Es hätte auch einfach ein

    VB.NET-Quellcode

    1. If myData.HasRows Then..
    getan.

    lg.

    LucaWelker
    lg.

    LucaWelker

    LucaWelker schrieb:

    Da wenn Option Strict nicht on ist die eins in ein true umgewandelt wird.

    Wird es nicht - ich habs probiert.
    Es läuft nun, weil er seinen Code nebenbei auch wie von dir erwähnt umgestaltet hat.

    Also nimmt er jetzt eine andere Änderung als Lösung an, als die letztendlich wirksame. Ok - dies ist ein freies Land - wenn man als Programmierer damit zufrieden ist, dasses irgendwie läuft, ohne zu verstehen, warum eigentlich - dann war mein Post natürlich überflüssig.
    Ich empfehle aber eine andere programmiererische Haltung :)

    LucaWelker schrieb:

    Conver.ToBoolean(1)

    VB.NET-Quellcode

    1. CBool(1)


    ist da einfacher :D

    Das mit der 1 war so im Tutorial..

    Normal sollte es auch so funktionieren. Der Fehler lag denke ich hier:

    Merio schrieb:


    Man muss die Werte in Anführungsstriche setzen :D
    LG
    Merio

    Merio schrieb:

    Das mit der 1 war so im Tutorial..
    Schlechtes Tutorial. Proggen die da auch mit Strict Off?

    Der Fehler lag denke ich hier:

    Man muss die Werte in Anführungsstriche setzen :D
    Ich denke, da denkst du falsch ;). Naja, vmtl. halbrichtig:
    Nämlich Zahlen in der Datenbank muß man nicht in Anführungsstriche setzen.
    Ist Banned in der DB eine Zahl oder ein Text?

    Ich würd sowas mal eben überprüfen (ist ja schnell gemacht). Weil du wirst sowas ja auch in Zukunft anwenden, und da ist Wissen besser als Vermuten.
    Schlecht für dich, deine Proggs, für die User deiner Proggs, und für die, die sich mit deinen Progger-Fragen auseinandersetzen wollen.

    Die hier nun mehrfach vorgebrachte Argumentation von Option Strict On! (die sich in diesem Thread wieder mal bestätigt hat) vermag dich nicht zu erreichen?