[VB 2017] Zugriff auf MySQL-Datenbank gescheitert ("Connection not valid/open")

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    [VB 2017] Zugriff auf MySQL-Datenbank gescheitert ("Connection not valid/open")

    Halli Hallo!

    Ich habe ein Problem mit meinem Programm (beste Einleitung!)
    Zuvor: JA ich habe gegoogelt. JA ich habe mir das Tutorial hier zur Registryanwendung durchgelesen. JA ich habe mein Buch "VB 2017" von Rheinwerk Computing zu Rate gezogen. JA ich habe meinen Lehrer gefragt. JA ich habe auf YouTube geguckt.
    Hat mir das alles weitergeholfen? NEIN!

    Na dann, das Programm!
    Jenes ist für meinen Infokurs Klasse 11, wir alle müssen uns ein eigenes ausdenken, das ist dann die Kurshalbjahresnote. Ich habe mir ein illustres Programm zur Verwaltung von Noten der Oberstufe überlegt. Dabei kann man Noten eintragen und ausrechnen lassen, das alles aber in Tests gliedern sowie Schüler-, Test- und Notendaten anzeigen lassen. Dabei sind alle Daten in einer MySQL-Datenbank gespeichert. Soviel zu dem was ihr euch schon hättet denken können.
    Kurz zum Ablauf: Man startet das Programm, es öffnet sich ein kleines Fensterchen in dem man zwei Konten auswählen kann: Administrator (Oberstufenkoordinatorin) und Lehrer. Bei letzterem muss dann zum PW noch ein BN eingegben werden. Um arbeiten zu können, habe ich hier die MySQL-Verbindung erstmal rausgelassen - da hat's auch schon nicht funktioniert. Ich schätze demzufolge mal, dass es ein allgemeines Problem ist und nicht spezifisch für den Programmteil.

    Das Problem kann ich euch nicht weiter erörtern, sollte aber eigentlich auch klar sein. Schaut's euch an! Falls ihr noch Infos zur DB braucht, scheut ecuh nicht. Da weiß ich aber nicht ganz, wie ich das hier präsentieren könnte.

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class notava_admin
    3. Dim con As New MySqlConnection ' Steuervariablen für MySQL
    4. Dim cmd As New MySqlCommand
    5. Dim reader As MySqlDataReader
    6. Dim id_Klasse As Integer
    7. Private Sub notava_admin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. cmb_KI_Jahrgang.Items.Add(11)
    9. cmb_KI_Jahrgang.Items.Add(13)
    10. cmb_KI_Klasse.Enabled = False
    11. btn_KI_Anzeigen.Enabled = False
    12. End Sub
    13. Private Sub cmb_KI_Jahrgang_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmb_KI_Jahrgang.SelectedIndexChanged
    14. btn_KI_Anzeigen.Enabled = False
    15. cmb_KI_Klasse.Enabled = True
    16. cmb_KI_Klasse.Items.Clear()
    17. If cmb_KI_Jahrgang.SelectedIndex = 0 Then
    18. cmb_KI_Klasse.Items.Add("a") : id_Klasse = 111
    19. cmb_KI_Klasse.Items.Add("b") : id_Klasse = 112
    20. cmb_KI_Klasse.Items.Add("c") : id_Klasse = 113
    21. cmb_KI_Klasse.Enabled = True
    22. ElseIf cmb_KI_Jahrgang.SelectedIndex = 1 Then
    23. cmb_KI_Klasse.Items.Add("a") : id_Klasse = 1
    24. End If
    25. End Sub
    26. Private Sub cmb_KI_Klasse_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmb_KI_Klasse.SelectedIndexChanged
    27. btn_KI_Anzeigen.Enabled = True
    28. End Sub
    29. Private Sub btn_KI_Anzeigen_Click(sender As Object, e As EventArgs) Handles btn_KI_Anzeigen.Click
    30. con.ConnectionString = "Data Source=localhost; Initial Catalog=notava; UID=root; password=yamaha910"
    31. con.Open()
    32. cmd.CommandText = "SELECT *, lehrer.name FROM klasse JOIN lehrer WHERE klasse.id_Klasse = " & id_Klasse & "AND WHERE klasse.id_tutor = lehrer.id_lehrer"
    33. reader = cmd.ExecuteReader
    34. lbl_KI_Klasseninfo.Text = "Klasse: " & cmb_KI_Jahrgang.SelectedItem & cmb_KI_Klasse.SelectedItem & vbCrLf &
    35. vbCrLf & "Anzahl Schüler: " & reader("klasse.Anzahl_Schueler") & vbCrLf &
    36. vbCrLf & "Tutor: " & reader("lehrer.name")
    37. reader.Close()
    38. con.Close()
    39. End Sub
    40. End Class


    Wenn ihr mit Sachen wie "externer Zugriff" kommt, dann erklärt sie mir bitte detailliert! Ich weiß, mein Programmierstil ist schlampig, ich habe keine Kommentare drin und auch keine Try's. Ich hoffe trotzdem, dass ihr alles versteht!

    Ich danke schon im Voraus :)
    Grüße,
    Adrian
    Bilder
    • fehler_connection.PNG

      45,13 kB, 898×452, 115 mal angesehen
    • form_admin.PNG

      22,45 kB, 1.575×885, 114 mal angesehen
    • login.PNG

      12,87 kB, 363×560, 119 mal angesehen
    • verweise.PNG

      56,47 kB, 1.038×765, 121 mal angesehen
    Bau dir ne separate Klasse für den DB Zugriff. Dort eine Methode um Daten zu laden und zu speichern. Dann musst du den Verbindungsaufbau nicht haufenweise neu schreiben.
    "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
    Versuchs mal so, den connectionstring musst Du halt definieren, entweder direkt hier oder in einer separaten Class, query ist das, was bei Dir commandtext ist.

    VB.NET-Quellcode

    1. Dim cnn As New MySqlConnection(connectionString)
    2. Using connection As New MySqlConnection(connectionString)
    3. Try
    4. cnn.Open()
    5. Dim command As New MySqlCommand(query, cnn)
    6. Dim reader As MySqlDataReader = command.ExecuteReader
    7. If reader.HasRows Then
    8. reader.Read()
    9. ...
    10. End If
    11. cnn.Close()
    12. Catch ex As Exception
    13. MessageBox.Show(ex.Message)
    14. End Try
    15. End Using


    Dein Connectionstring sieht auch ungewöhnlich aus, vielleicht besser so:

    VB.NET-Quellcode

    1. Dim connectionString As String = "Server=localhost; uid=root; pwd=xxxxxx; database=xxxxx;"