[VB] MySQL Ausgabe Fehler[Hilfe]

  • VB.NET
  • .NET (FX) 4.0

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Jojohann.

    [VB] MySQL Ausgabe Fehler[Hilfe]

    Hallo Community,

    bitte verteufelt mich nicht. Ich bin nur ein Anfänger, welcher sich langsam wieder in die Materie einarbeiten möchte.

    Also es kann eine Verbindung zur MySQL Datenbank verbunden werden.
    Die entsprechende Tabelle userlist ist erstellt und es gibt zwei Einträge.
    Die Tabelle ist wie folgt aufgebaut: id, username, password, ...(unwichtig)
    Alles funktioniert, bis auf Zeile 31.
    Keine Ahnung, wie ich das Lösen kann. Aber ich ab zeile 28 komm ich selber nicht mehr richtig mit.

    Danke im Voraus.

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class globalconnection
    3. Dim MySQL As MySqlConnection
    4. Dim Adapter As New MySqlDataAdapter
    5. Dim SQL As String
    6. Dim Command As New MySqlCommand
    7. Dim data As MySqlDataReader
    8. Dim loginfo = {False, "id", "username", "passwort"}
    9. Function shortcon(ByVal server As String, ByVal username As String, ByVal password As String, ByVal database As String) As Boolean
    10. Try
    11. MySQL = New MySqlConnection
    12. MySQL.ConnectionString = "server=" + server + ";userid=" + username + "; password=" + password + ";database=" + database
    13. MySQL.Open()
    14. consettings.btn_con_test.BackColor = Color.Green
    15. Return True
    16. Catch ex As Exception
    17. MsgBox("Es konnte leider keine Verbindung zur MySQL Datenbank hergestellt werden. Bitte überprüfen Sie Ihre Internetverbindung und Eingaben", MsgBoxStyle.Exclamation, "Fehlerhafte Verbindung")
    18. consettings.btn_con_test.BackColor = Color.Red
    19. Return False
    20. End Try
    21. End Function
    22. Function login(ByVal user As String, ByVal pw As String) As Boolean
    23. If shortcon(My.Settings.con_address, My.Settings.con_username, My.Settings.con_password, My.Settings.con_db) Then
    24. Try
    25. SQL = "SELECT id FROM userlist WHERE username = '" + user + "' AND password = '" + pw + "'"
    26. Command.Connection = MySQL
    27. Command.CommandText = SQL
    28. data = Command.ExecuteReader <-- Hier entsteht anscheinend der Fehler
    29. If data.Read = pw Then
    30. Return True
    31. Else
    32. Return False
    33. End If
    34. Catch ex As Exception
    35. Return False
    36. End Try
    37. Else
    38. Return False
    39. End If
    40. End Function
    41. End Class
    Hier bitte

    MySQLChat.exe!MySQLChat.globalconnection.login(String user, String pw) Zeile 32 + 0x1c Bytes MySQLChat.exe!MySQLChat.login.Button2_Click(Object sender, System.EventArgs e) Zeile 8 + 0x5a Bytes Basic

    was mich persönlich wundert ist gerade, dass er mir diesmal den Fehler bei

    VB.NET-Quellcode

    1. If data.Read = pw Then
    2. Return True
    3. Else
    4. Return False
    5. End If
    angibt.
    Davor habe ich immer alles stück für stück in ein Try gesetzt und da wahr sichtlich der Fehler bei

    VB.NET-Quellcode

    1. data = Command.ExecuteReader


    Jojohann schrieb:

    MySQLChat.exe!MySQLChat.globalconnection.login(String user, String pw) Zeile 32 + 0x1c Bytes MySQLChat.exe!MySQLChat.login.Button2_Click(Object sender, System.EventArgs e) Zeile 8 + 0x5a Bytes Basic
    Das ist keine Fehlermeldung.

    kriegst du keine Fehlermeldung?

    Falls du nicht weißt, wie sowas aussieht - hier im Video kommt kurz mal eine vor: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Ups, ich hoffe jetzt das ich diesmal das richtige erwischt habe.
    Zumindest ist das hier die Ausgabe, welche erscheint wenn ich die Funktion "login" aufrufe.

    In der Fehlerliste wird nichts angezeigt.

    Eine nicht behandelte Ausnahme des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.Zusätzliche Informationen: Ungültige Konvertierung von der Zeichenfolge teste in Typ Boolean.
    ah - jetzt sehe ichs auch

    Jojohann schrieb:

    VB.NET-Quellcode

    1. If data.Read = pw Then
    Ist natürlich Quatsch.
    Welchen Datentyp hat Read, und welchen Datentyp hat pw?

    Kannste vermutlich nicht beantworten. Das muss man aber beantworten können, wenn man programmieren will.
    Also hier mal ein schlampiger Überblick über von was man redet, wenn man über Programm-Code spricht: Grundlagen: Fachbegriffe

    naja - wird dich kaum interessieren.
    Also mein Vorschlag: statt

    VB.NET-Quellcode

    1. If Data.Read = pw Then
    2. Return True
    3. Else
    4. Return False
    5. End If
    probierma einfach so:

    VB.NET-Quellcode

    1. Return Data.Read

    Vielen Dank, funktioniert super.

    als schlampigen Überblick würde ich deinen Beitrag nicht betrachten.(Bin ihn nur kurz überflogen)

    ​Welchen Datentyp hat Read, und welchen Datentyp hat pw?

    Also pw sollte den Datentyp String haben.
    Welchen data.read genau hat, kann ich leider nur raten. Ich würde dabei entweder an String denken, bzw. an ein String Array. Aber mein Gedanke ist bestimmt auch falsch, da ich ja durch den SQL-Befehl das Feld an Ausgaben entweder auf einen oder auf keinen begrenzen sollte.
    Richtig?
    wie gesagt, man sollte jederzeit von jedem Ausdruck und Teilausdruck den Datentyp angeben können, wenn man den Code im Visualstudio hat - und kein Compiler-Fehler vorliegt.
    Wenn man raten muss, fehlt eine der fundamentalsten Grundlagen.

    Hier mal ein klein Tut direkt zu diesem Thema: Video-Tut: Welchen Datentyp hat das Objekt?

    Dein Fehler bestand vor allem in Missachtung der Unterschiedlichkeit verschiedener Datentypen - das ist auch, was die Fehlermeldung sagt: Die Zeichenfolge (String) konnte nicht in Boolean konvertiert werden.

    Diese Missachtung rührt auch daher, dass dein Visualstudio besch... eingestellt ist, und das solltest du als nächstes ändern: Visual Studio - Empfohlene Einstellungen
    Das ist aber nix zum Überfliegen, sondern das muss man machen, und wenn mans gemacht hat, entsteht noch ein erheblicher Aufwand, all die Schlampereien zu korrigieren, die einem angezeigt werden, nachdem man sein VS so eingestellt hat, dass der Compiler Datentypen respektiert.
    Der Aufwand ist nervig, aber unvermeidlich.
    Und dabei lernst du, wesentlich besser zu programmieren, und Code zu verstehen.

    Wie gesagt: Es ist unvermeidlich, denn ohne unterschiedliche Datentypen zu respektieren kannst du nur höcht anfällige Gurken-Programme erstellen.
    Guten Morgen,

    Habe mir gerade deinen Beitrag zu den Fachbegriffen durchgelesen(diesmal konzentriert). Und nach 10 min ist mirdann der fehler aufgefallen.
    Data.read ist ja zumindest für meine abfrage ein Integer und kein string und einen string kann ich auch nicht mit einem int vergleichen.
    Außerdem macht esja keinen sinn die id mit dem passwort zu vergleichen.

    Aufjedenfall danke für die schnelle hilfe erfinderdesrades
    nö - data.Read ist kein Integer. Aber immerhin der Gedanke, dass ein Integer kein String ist, und solch zu vermixen einen Fehler verursachen würde, ist richtig

    Guck dir das Video-Tut an, und finde dann heraus, welchen Datentyp data.Read wirklich zurückgibt. Ist einfach: Einfach bischen Maus wackeln, und du weißt bescheid.

    Übrigens

    Jojohann schrieb:

    ...zumindest für meine abfrage ...
    Meinst du, eine Methode könne je nach Lage der Dinge ihren Datentyp ändern? noch viel lernen du musst


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Und ich dachte, dass der reader dann die datentypen von der tabelle mit übernimmt. Aber wie kann ich dann z.b die id in einen int verwandeln? Als ich noch zuhause war, habe ich es einmal versucht mit convert.toint und auf die schnelle hat das glaube ich auch nicht funktioniert.
    Also wenn ich das jetzt richtig verstanden habe ist der datentyps eines datsreadery erebnisses ein item.
    Welches ich mit den tabellen koordinaten auslesen kann?
    Und convertieren kann ich es ancheinend mit getint bzw. Mit getstring.

    In einer hinsicht, ist dass vieß von dir, aber andererseits ist es besser so
    ;)

    Nope, meine Vermutung war falsch und getint funktioniert irgendwie bei mir auch nicht so richtig.

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