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

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » mit c# auf mysql db zugreifen, fehler bei ExecuteReader()
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

mit c# auf mysql db zugreifen, fehler bei ExecuteReader()

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
tasas
myCSharp.de-Mitglied

Dabei seit: 30.07.2018
Beiträge: 4


tasas ist offline

mit c# auf mysql db zugreifen, fehler bei ExecuteReader()

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

verwendetes Datenbanksystem: mysql

hallo,

dies ist meine erste frage im forum

Ich habe mir letztens einen raspberry pi zugelegt und darauf lasse ich nun eine mysql-Datenbank laufen. Ich habe mir nun ein kleines Programm geschrieben, welches auf die DB zugreifen soll.

Ich kann zwar erfolgreich eine Connection aufbauen (also OpenConnection() liefert true zurück), aber bei "com.ExecuteReader()" erhalte ich einen Timeout:

Code:
1:
Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat

An sich ist die Fehlermeldung ja ziemlich klar, ich verstehe aber nicht warum der Verbindungsversuch fehlschlägt, wenn doch "OpenConnection()" erfolgreich war.

Wenn ich bei "SELECT id FROM tabelle01" statt "id" z.B "asdfasdf" eingebe (die Spalte gibt es natürlich nicht) erhalte ich auch eine Fehlermeldung die mir genau das sagt.
Also hab ich ja irgendwie schon eine Verbindung zur DB, wieso kann ich dann aber keine Daten auslesen?

Hier der Code:

C#-Code:
using System;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            DBConnect con = new DBConnect();
            con.GetTestData();
            Console.ReadLine();
        }
    }

    class DBConnect
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;

        public DBConnect()
        {
            Initialize();
        }

        private void Initialize()
        {
            server = "192.168.100.116";
            database = "mydb";
            uid = "user";
            password = "geheim";
            string connectionString;
            connectionString = "server=" + server + ";port=3306" + ";database=" + database + ";uid=" + uid + ";password=" + password + ";CharSet=utf8;";
            connection = new MySqlConnection(connectionString);
        }

        private bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }

        private bool CloseConnection()
        {
            try
            {
                connection.Close();
                return true;
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }

        public void GetTestData()
        {
            if(this.OpenConnection() == true)
            {
                string query = "SELECT id FROM tabelle01";
                MySqlCommand com = new MySqlCommand(query, connection);
                try
                {
                    MySqlDataReader reader = com.ExecuteReader();
                    while (reader.Read())
                    {
                        Console.WriteLine("{0} ist ein erhaltener Wert", reader.GetString(1));
                    }
                }
                catch(Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
    }
}

Ich hoffe ihr könnt mir helfen

mfg tasas
30.07.2018 19:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


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


Abt ist offline

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

Naja, Du liest die Fehlermeldung nicht genau.

Die Fehlermeldung sagt auch aus, dass der MySQL Server zu lange für die Antwort braucht -> Timeout.
Das legt auch das restliche Verhalten nahe, wenn es bei Syntaxfehler funktioniert aber beim Laden der Inhalte nicht.

Nen Raspberry ist sehr sehr langsam bei Datenbanken. Er ist für IO einfach nicht gedacht.
Da reichen schon wenige Einträge in eine DB, und er braucht gefühlt ewig.

Spiel halt mal mit dem Timeout.

Ansonsten ist der Code auch strukturell sehr sehr verbesserungswürdig; aber denke, dass Du aktuell eh nur am Probieren bist.
30.07.2018 19:41 Beiträge des Benutzers | zu Buddylist hinzufügen
tasas
myCSharp.de-Mitglied

Dabei seit: 30.07.2018
Beiträge: 4

Themenstarter Thema begonnen von tasas

tasas ist offline

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

Danke für deine schnelle Antwort

Ich hab den Timeout jetzt stark erhöht, jedoch hat das meinen Fehler leider nicht behoben.
31.07.2018 10:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 118
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist offline

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

Wie viele Datensätze sind denn in deiner Datenbank?

Ist der Tabellenname korrekt geschrieben?

Stört eine Firewall oder ähnliches eventuell?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von 123thomas am 31.07.2018 13:19.

31.07.2018 13:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tasas
myCSharp.de-Mitglied

Dabei seit: 30.07.2018
Beiträge: 4

Themenstarter Thema begonnen von tasas

tasas ist offline

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

In der Db sind nur sechs Datensätze

Ja, der Tabellenname stimmt, wenn ich einen falschen eingebe erhalte ich auch eine entsprechende Fehlermeldung:

Code:
1:
Table 'tabellexyz' doesn't exist

ich denke nicht dass eine Firewall den Datenaustausch blockierte, da
ich wenn ich auf meinem Pi "iptables -L" eingebe folgenden output erhalte:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Gibt es sonst noch etwas was die Kommunikation blockieren könnte?
31.07.2018 14:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.779
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

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

Kommst du denn mit einem anderen Tool auf die DB?

Und hast du den MySQL-Server für Remote freigegeben:  How do I open up my MySQL on my Raspberry Pi for Outside / Remote Connections?


Hier noch ein weiterer Link:  Connecting c# program with MySQL database on raspberry pi. Unable to connect to any of the specified MySQL hosts
31.07.2018 15:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tasas
myCSharp.de-Mitglied

Dabei seit: 30.07.2018
Beiträge: 4

Themenstarter Thema begonnen von tasas

tasas ist offline

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

Ja ich kann mit der MySql Workbench von meinem Laptop aus auf die Db zugreifen.

Um Remote freizugeben habe ich in der Config-Datei die "bind-adress" auskommentiert, da ich ja über die Workbench auf die Db zugreifen kann, nehme ich an das der Remote-Zugriff funktioniert.
31.07.2018 16:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 31.10.2020 08:53