Serialsystem funktioniert nicht

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

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Serialsystem funktioniert nicht

    Hallo,

    da ich noch wenig Ahnung im Thema MySQL und Visual Basic habe, frage ich doch am besten hier nach einer Lösung. Ich habe eine MySQL Datenbank welche 2 Tabellen beinhaltet (Userlist und Serial). Ich habe einen kleinen Launcher gebastelt,welcher dort nach Username und Passwort sucht und bei jeweiligem Fund die entsprechenden Meldungen "Logged in" oder "Wrong credentials" ausgibt. Außerdem habe ich ein Registrerungsformular hinzugefügt welches dem Benutzer möglich macht, einen Account zu erstellen. Dafür benötigt er eine Seriennummer (serial). Wenn diese richtig ist soll ein neues Konto erstellt werden und der entsprechende Serial soll aus der Tabelle gelöscht werden. Allerdings löscht sich der Serial nicht aus der Tabelle....Hier mein Code

    VB.NET-Quellcode

    1. ​Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim MysqlConnection = New MySqlConnection
    3. MySqlConnection.ConnectionString = "server=****;userid=*****;password=********;database=********"
    4. MySqlConnection.Open()
    5. Dim Myadapter As New MySqlDataAdapter
    6. Dim sqlquery = "SELECT * from Serials WHERE serial= '" & TextBox3.Text & "'"
    7. Dim command As New MySqlCommand
    8. command.Connection = MysqlConnection
    9. command.CommandText = sqlquery
    10. Myadapter.SelectCommand = command
    11. Dim MyData As MySqlDataReader
    12. MyData = command.ExecuteReader
    13. If MyData.HasRows = 0 Then
    14. MessageBox.Show("Invalid Serial Code...Try again")
    15. MysqlConnection.Close()
    16. Else
    17. MessageBox.Show("Successfully registered!")
    18. sqlquery = "DELETE FROM `Serials` WHERE `serial`= '" & TextBox3.Text & "'"
    19. End If
    20. End Sub

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

    1. Schickst Du Deine sqlquery in Zeile 20 auch irgendwie los?
    2. Sicher, dass das mit den Apostrophen (sind keine Hochkommas) in Zeile 20 seine Richtigkeit hat?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also sollte Zeile 20 eher so lauten:

    VB.NET-Quellcode

    1. sqlquery = "DELETE FROM Serials WHERE serial= '" & TextBox3.Text & "'"


    Bin mehr oder weniger am rumprobieren

    Bin mir nicht sicher, wie ich die sqlquery losschicke. Wie gesagt, ich bin neu in dem Gebiet. Außerdem habe ich nicht gedacht, dass ich sie abschicken müsste, da die SELECT-Abfrage ja auch funktioniert hat
    Wenn Du mithilfe von Zeile 7 an Deine Daten kommst, ja, dann solltest Du die Namenssyntax so beibehalten. Und die Query losschicken. Bisher wird laut gepostetem Code im Else-Teil nur ein bestimmter Text/String zugewiesen. Aber sonst nix weiter damit gemacht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Naja, genauso wie Du die Select-Abfrage losgeschickt hast. Es ist ja einfach nur, dass Du dem MySQLConnector den String gibst.

    VB.NET-Quellcode

    1. Dim sqlquery = "SELECT * from Serials WHERE serial= '" & TextBox3.Text & "'"
    2. Dim command As New MySqlCommand
    3. command.Connection = MysqlConnection
    4. command.CommandText = sqlquery
    5. Myadapter.SelectCommand = command

    Wenn das bei Dir funktioniert, dann pack die letzten 4 Zeilen eben noch in Deinen Else-Block, nachdem Du sqlcommand (was ja nur ein String ist) einen neuen Text zugewiesen hast, nämlich den, der mit DELETE beginnt.
    (Oder besser gleich einfach in ne eigene Sub, dann ist es wiederverwendbar, aber das ist ne andere Geschichte.)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn ich es aber so einfüge:

    VB.NET-Quellcode

    1. Else
    2. MessageBox.Show("Successfully registered!")
    3. sqlquery = "DELETE * from Serials WHERE serial= '" & TextBox3.Text & "'"
    4. Dim command As New MySqlCommand
    5. command.Connection = MysqlConnection
    6. command.CommandText = sqlquery
    7. Myadapter.SelectCommand = command


    Dann heißt es : Variable command hides a variable in an enclosing block

    Nach dem Ändern der Variable command in cmd, konnte ich das Programm auch wieder ausführen. Allerdings wird der Serial immer noch nicht gelöscht
    Warum schließt du dann den Reader nicht, nachdem du gelesen hast?
    Connection.Close
    Ausserdem solltest du dem ExecuteNonQuery natürlich schon den entsprechenden CommandText mitgeben, bevor du es ausführst.
    Command.CommandText=sqlquery

    Schau dir einfach die entsprechenden Beispiele bei MSDN an.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich bin hier grade komplett am verzweifeln...Ich verstehe nicht was ich einsetzen soll und wie. Die Beispiele auf MSDN verwirren mich nur noch mehr. Was muss ich hier jetzt ändern

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim MysqlConnection = New MySqlConnection
    3. MysqlConnection.ConnectionString = "#####"
    4. MysqlConnection.Open()
    5. Dim Myadapter As New MySqlDataAdapter
    6. Dim sqlquery = "SELECT * from Serials WHERE serial= '" & TextBox3.Text & "'"
    7. Dim command As New MySqlCommand
    8. command.Connection = MysqlConnection
    9. command.CommandText = sqlquery
    10. Myadapter.SelectCommand = command
    11. Dim MyData As MySqlDataReader
    12. MyData = command.ExecuteReader
    13. If MyData.HasRows = 0 Then
    14. MessageBox.Show("Invalid Serial Code...Try again")
    15. MysqlConnection.Close()
    16. Else
    17. MessageBox.Show("Successfully registered!")
    18. sqlquery = "DELETE FROM Serials WHERE serial= '" & TextBox3.Text & "'"
    19. command.CommandText = sqlquery
    20. command.ExecuteNonQuery()
    21. MysqlConnection.Close()
    22. End If
    23. End Sub

    Niklas9401 schrieb:

    Was muss ich hier jetzt ändern
    Erstmal sollteste die Finger von Datenbanken lassen, und stattdessen die erforderlichen Grundlagen lernen.
    In deim Fall wäre der erste Schritt Visual Studio - Empfohlene Einstellungen
    weil offsichtlich proggst du Strict Off, und bist dir daher ühaupt nicht im Klaren, mit welchen Datentypen du arbeitest, ja was ein Datentyp überhaupt ist.

    Als nächstes wären dann Datenmodellierung und Databinding dran - und da gehe ich auch davon aus, dass dir die Begriffe unbekannt sind.
    nichtsdestotrotz sind es die entscheidenden Begriffe, ohne die man prinzipiell einfach ühaupt keine Datenverarbeitung nach Stand der Technik erstellen kann (Databinding ist numal Stand der Technik).
    Aber eins nach dem anderen - mit Visual Studio - Empfohlene Einstellungen hast du sicherlich schon einiges zu tun und zu verdauen ;)
    Und was ist damit?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. MysqlConn = New MySqlConnection
    3. MysqlConn.ConnectionString = "######"
    4. Dim READER As MySqlDataReader
    5. Try
    6. MysqlConn.Open()
    7. Dim Query As String
    8. Query = "SELECT * from Serials WHERE serial= '" & TextBox1.Text & "'"
    9. COMMAND = New MySqlCommand(Query, MysqlConn)
    10. READER = COMMAND.ExecuteReader
    11. Dim Count As Integer
    12. Count = 0
    13. While READER.Read
    14. Count = Count + 1
    15. End While
    16. If Count = 1 Then
    17. MessageBox.Show("Successfully logged in!")
    18. MysqlConn.Dispose()
    19. MysqlConn.Open()
    20. Dim Querycmd As String
    21. Querycmd = "Delete from Serials WHERE serial= '" & TextBox1.Text & "'"
    22. COMMAND = New MySqlCommand(Querycmd, MysqlConn)
    23. Else
    24. MessageBox.Show("Wrong credentials")
    Kleine Orientierungshilfe (ungetestet, aus dem Kopf am Handy) in der Hoffnung, deine Verwirrung zu beheben.

    VB.NET-Quellcode

    1. Private Sub LoescheSerial(sSerial As String)
    2. Dim MysqlConnection = New MySqlConnection
    3. MysqlConnection.ConnectionString = "#####"
    4. Dim sqlquery = "Delete from Serials WHERE serial= '" & sSerial & "'"
    5. Dim command As New MySqlCommand
    6. command.Connection = MysqlConnection
    7. command.CommandText = sqlquery
    8. 'Verbindung öffnen
    9. MysqlConnection.Open()
    10. 'Statement abfeuern
    11. command.ExecuteNonQuery()
    12. 'Verbindung schließen
    13. MysqlConnection.Close()
    14. End Sun


    P.s. Ich ich hätte mir für den ganzen DB Zugriff ne eigene Klasse geschrieben, damit ich in der Oberfläche kein SQL Zeug habe, aber du willst das Projekt wohl nur noch schnell abschließen...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.