Laden...

Verbindung zu MySql schlägt fehl

Erstellt von PresidentOfNoobistan vor 3 Jahren Letzter Beitrag vor 2 Jahren 574 Views
P
PresidentOfNoobistan Themenstarter:in
6 Beiträge seit 2021
vor 3 Jahren
Verbindung zu MySql schlägt fehl

Verwendetes Datenbanksystem: <MySQL>

Hallo liebe Gemeinde,

ich habe mich an mein zweites Projekt drangemacht. Es soll ein Organizer mit einem Login- & Registerscreen werden und jedwede Benutzer- und Login-Daten sollen abgespeichert. Es sollen ebenfalls in den Organizer eingegebene Daten, wie z. B. Name, Vorname, E-Mail-Adresse, Telefonnummer etc. pp. abgespeichert werden.
Ich benutze XAMPP und wollte über Visual Studio Code eine Verbindung herstellen und eine Tabelle erstellen aber das Ganze möchte nicht so funktionieren. NuGet & der Connector NET 8.0 sind soweit installiert, in dem Projekt habe ich via Rechtsklick im Projektmappen-Explorer auf das Projekt -> Hinzufügen -> Verweise -> Erweiterungen -> "MySql.Data" hinzugefügt.
Wo könnte das Problem liegen? Was mache ich falsch?

Ich bedanke mich schon mal für die Antworten.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;



namespace Organizer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        } 

        private void BtnAbbruch_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void BtnAnmelden_Click(object sender, EventArgs e)
        {     
            if(TxtBenutzer.Text == "Benutzer" && TxtPasswort.Text == "Passwort")
            {
              //  new Form2().Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("Der Benutzername oder das Passwort ist falsch! Bitte noch einmal eingeben!");
                TxtBenutzer.Text = "";
                TxtPasswort.Text = "";
            }
        }

        public void save_entry()
        {
            String url = "datasource=localhost;port=3306;username=root;password=;";
            String sqlCode = "CREATE TABLE personen(name VARCHAR(30), vorname VARCHAR(25), personalnummer INT, gehalt DOUBLE, geburtstag DATE, PRIMARY KEY NOT NULL(personalnummer))";

            MySqlConnection connection = new MySqlConnection(url);
            MySqlCommand eingabe = new MySqlCommand(sqlCode, connection);

            connection.Open();
            Console.WriteLine("Die Verbindung wurde hergestellt!");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            save_entry();
        }
    }
}

D
261 Beiträge seit 2015
vor 3 Jahren

Leider ist meine Glaskugel für eine unbestimmte Zeit kaputt. Könntest du erläutert was genau "aber das Ganze möchte nicht so funktionieren." bedeutet? Erhältst du Fehlermeldungen? Passiert nichts? Du hast Ausgaben in deinem Code eingebaut, werden diese ausgegeben?

Und sobald du SQL Queries mit dynamischen Werten absetzt, solltest du den folgenden Artikel beachten: [Artikelserie] SQL: Parameter von Befehlen

Und da du auch Logindaten inkl. Passwörter in der Datenbank speichern möchtest, solltest du dir diesen Beitrag von Abt noch durchlesen: Wie baue ich ein Online-Anmeldesystem für ein Unity Game?

P
PresidentOfNoobistan Themenstarter:in
6 Beiträge seit 2021
vor 3 Jahren

Das mit deiner Glaskugel tut mir leid 🙂
Spaß bei Seite, meine Formulierung diesbezüglich war wirklich etwas doof..
Die sind die Fehlermeldungen die ich erhalte:

Fehlermeldung:
MySql.Data.MySqlClient.MySqlException: "Unable to connect to any of the specified MySQL hosts."
SocketException: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 127.0.0.1:3306

Wie könnte ich diese beheben?
Habe es auch mit Java ausprobiert und es hat letzten Abend ohne Probleme geklappt..

PS: Danke für die Threads, sie sind sehr hilfreich.

T
2.219 Beiträge seit 2008
vor 3 Jahren

Was du aktuell zusätzlich noch falsch machst, ist dein Verbindungshandling.
In deinem Code öffnest du zwar eine Verbindung, machst damit aber nichts.
Ebenfalls schließt du diese nicht, hier solltest du using oder wenigstens Close aufrufen, wenn du fertig bist.
Auch wird dein Befehle zum erstellen der Tabelle nicht ausgeführt.
Hier musst du die ExecuteNonQuery Methode des MySqlCommand aufrufen.

Die Zugansdaten gehören in eine Config Datei, nicht in den Code selbst.
Sich dann auch noch mit root ohne Passwort anmelden, ist schon eine krasse Sicherheitslücke.
Hier solltest du mindestens einen eigenen Benutzer anlegen und der nur auf seine Datenbank Zugriff hat.
Wenn die Anwendung verteilt laufen soll, also z.B. Zugriffe von extern auf die Datenbank, dann solltest du der Datenbank noch eine (Web)Api vorschalten.
Zugriffe von extern direkt auf eine Datenbank sind ein absolutes NoGo!

Da du hier auch mit kritischen Daten arbeitest, hast du hofentlich ein ordentliches Datenschutz Konzept.
Hier willst du sonst keine Daten wie Telefonnummern oder Emails speichern.
Ebenfalls brauchst du dann noch die Einwilligung aller Benutzer, die ihre Daten bei dir speichern sollen.
Die DSGVO hat hier einige kritische Punkte festgeschrieben, mit denen du dich vorab beschäftigen solltest.

Nachtrag:
Dein Verbindungsproblem aus deinem letzten Kommentar deutet darauf hin, dass entweder die MySQL Instanz nicht läuft.
Hier müsstest du also z.B. über ein entsprechendes Tool erstmal schauen ob du gerenell eine Verbindung aufbauen kannst.
Wenn ja, dann stimmen deine Verbindungsdaten im Code ja nicht.

Nachtrag 2:
Ebenfalls solltest du deinen Code aufteilen.
Datenbankzugriffe erfolgen bei sauberen Code nicht in der UI.

Schau dir am besten dazu noch den Artikel für die 3 Schichten Architektur an.

[Artikel] Drei-Schichten-Architektur

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

H
523 Beiträge seit 2008
vor 3 Jahren

Für mich sieht der Connectionstring nicht richtig aus. Jedenfalls sieht meiner (ich arbeite täglich mit MySQL & MariaDB) anders aus 🙂


Server=localhost;Port=3306;Database=myDataBase;Uid=root;Pwd=myPassword;

3.825 Beiträge seit 2006
vor 3 Jahren

Wenn die Verbindung nicht funktioniert dann immer mit HeidiSQL probieren mit den gleichen Anmeldedaten.

Wenn es da nicht geht : Anmeldedaten falsch !

Wenn es da geht : Programm falsch !

"data source" kann man statt "server" benutzen, dann aber in 2 Wörtern !

"user id" oder "uid" für Username.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
368 Beiträge seit 2006
vor 3 Jahren

Zusätzlich könnte es auch ein Treiberproblem geben: MySQL connection strings - ConnectionStrings.com

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

F
5 Beiträge seit 2021
vor 2 Jahren

ich würde generell keine verbindungen der App direkt zur Datenbank erstellen. Falls du größere Datenmengen aus der Datenbank abruft dauert das sehr lange.
Ich würde dir empfehlen dich etwas über eine sogenannte PHP Schnittstelle schlau zu machen.

Aber so solltest du dein Programm nicht öffentlich stellen. Gibt dabei eineige kritische Punkte. Externer Zugriff direkt auf die Datenbank? Puuuuuuuh.
Wenn da son heini mit Wireshark sitzt kann der das alles wunderschön mitlesen, was da wo von wo mit wen und was abgespeichert wird. Zusätzlich kann der sich dann einfach so in deine Datenbank einloggen. So lockt man hacker an.

PHP dateien laufen Server seitig wodurch keine sau der welt ohne FTP zugriff diese PHP files begutachten kann. Dann noch eine SSL verschlüsselung draufpacken und Passwörter verschlüsseln und dann bist du grundsätzlich auf der sicheren seite.

T
2.219 Beiträge seit 2008
vor 2 Jahren

@FlattiCo
Die Schnittstelle sollte hier technologisch neutral sein bzw. auf vorhandene Technik aufsetzen und möglichst austauschbar sein.
Deshalb hatte ich oben auch schon von Web API gesprochen.
Diese kann man ohne Probleme mit C# umsetzen.
Diese basiert dann auch auf bestehenden Techniken wie http für die Kommunikation und z.B. Json als Datenformat.

Sich auf PHP zu verlassen, nur weil es Serverseitig läuft ist auch etwas einseitig gedacht.
Generell sollte man hier auch prüfen ob diese Zentrale Instanz nötig ist.
Das der TE sich dann auch um das Thema Datenschutz gedanken machen muss, dürfte das Thema noch um einiges problematischer werden.
Da es aber seit einem Monat kein Feedback mehr gab, scheint der TE das Problem andersweitig gelöst zu haben.
Ob hier noch Feedback Erfolgt ist deshalb fraglich.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.