myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Verbindung zur MySQL-Datenbank besteht, Fehler bei MySqlCommand::ExecuteReader()
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Verbindung zur MySQL-Datenbank besteht, Fehler bei MySqlCommand::ExecuteReader()

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
1337-Cat 1337-Cat ist weiblich
myCSharp.de-Mitglied

Dabei seit: 23.05.2019
Beiträge: 1
Entwicklungsumgebung: VS, Qt
Herkunft: #Neuland


1337-Cat ist offline

Verbindung zur MySQL-Datenbank besteht, Fehler bei MySqlCommand::ExecuteReader()

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwendetes Datenbanksystem: MySQL

Hallo,

ich habe auf einem lokalen Server im Haus eine MySQL-Datenbank.
Mittels meiner App kann ich mich mit der Datenbank verbinden, und erfolgreich Pings ausführen. Sobald ich aber MySqlCommand::ExecuteReader() aufrufe, bekomme ich die folgende Fehlermeldung:

Fehlermeldung:
"Connection must be valid and open."

Hier ist der Code:

C#-Code:
MySqlConnectionStringBuilder conBuilder = new MySqlConnectionStringBuilder();
        MySqlConnection dbConn;

        public void buildConn()
        {
            conBuilder.Server = textBox2.Text;
            conBuilder.Port = 3306;
            conBuilder.UserID = "root";
            conBuilder.Password = "xxxx";
            conBuilder.Database = "test";
            conBuilder.ConnectionTimeout = 15;

            String connStr = conBuilder.ToString();
            String queryStr = textBox1.Text;
            MySqlCommand query = new MySqlCommand(queryStr, dbConn);


            dbConn = new MySqlConnection(connStr);
            DataTable table = new DataTable();
            dbConn.OpenAsync();
            MySqlDataReader reader = query.ExecuteReader();
            label1.Text = "";

            while(reader.Read())
            {
                label1.Text += reader["Name"] + "\n";
            }
            dbConn.CloseAsync();
        }

Mit einer Datenbank auf localhost funktioniert das.
Die Datenbank ist auch korrekt konfiguriert, da ich mittels einer Qt-C++ App damit problemlos interagieren kann.
23.05.2019 12:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.740
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du verwendest hier Async auch falsch (klassischer Pitfall); bzw. prinzipiell das ganze Handling von Connections.
Evtl. etwas #Neuland, wenn Du es schon so schön betonst. fröhlich

Trenne die Abfrage der Datenbank vom Connection Handling; anders geht es nicht sauber.
 [Artikel] Drei-Schichten-Architektur

C#-Code:
      dbConn.OpenAsync();

führt dazu, dass Dein Code schneller ausgeführt wird als die Connection geöffnet wird, weil hier das await fehlt.

Korrekt wäre

C#-Code:
await dbConn.OpenAsync();

was sich natürlich dann durch die ganzen Methoden durchziehen muss, damit es korrekt ist.

Verwende daher entweder die synchronen Methoden (nicht empfohlen) oder verwende asycn/await korrekt (empfohlen).

D.h.
- Connection zusammen bauen
- Connection asynchron öffnen
- Datenbank asynchron abfragen
- Connection asynchron schließen

Von einem manuellen Wait, um asynchrone Methoden zu "wrappen", rate ich generell ab.
23.05.2019 12:50 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.06.2019 02:37