Laden...

MySQL mehrere Werte auslesen und als String wiedergeben

Letzter Beitrag vor 3 Jahren 5 Posts 379 Views
MySQL mehrere Werte auslesen und als String wiedergeben

Verwendetes Datenbanksystem: <MySQL>

Moin, ich will aus einer MySQL Tabelle daten wie: "username, group" usw. auslesen und mir die als string wiedergeben lassen, ich bin bisher daran gescheitert.

CODE:


public void getUsername()
        {
            string externalip = new System.Net.WebClient().DownloadString("http://icanhazip.com");
            MySqlConnection conn = Login.conn;
            
            using (var cmd = new MySqlCommand("SELECT * from users WHERE externalip='" + externalip + "'", conn))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    while(reader.Read())
                    {
                        string username = reader.GetString(0);
                        string group = reader.GetString(1);

                        Console.WriteLine(username + group);
                    }
                }
            }
        }

Fehler: > Fehlermeldung:

Ausnahme ausgelöst: "MySql.Data.MySqlClient.MySqlException" in MySql.Data.dll
Ausnahme ausgelöst: "MySql.Data.MySqlClient.MySqlException" in MySql.Data.dll
Ausnahme ausgelöst: "MySql.Data.MySqlClient.MySqlException" in MySql.Data.dll
Ausnahme ausgelöst: "MySql.Data.MySqlClient.MySqlException" in MySql.Data.dll

Datenbank:

Edit von Abt: externes Bild entfernt, bitte gemäß Forenregeln anhängen.

Schau dir mal deine SELECT Anweisung an - mit **SELCT *** werden alle Felder gelesen. Ist für mich ein absolutes NoGo.
Das Problem von dir wird sein, dass kein String als Ergebnis kommt, sondern ein anderer Datentyp. Deswegen immer SELECT username, group...

HINWEIS: Auch der Weg wie du das SQL Statement zusammensetzt ist alles andere als optimal. Schau dir mal das Thema [Artikelserie] SQL: Parameter von Befehlen an.

Hallo,

Gibt es zur der Exception auch ein Stacktrace? Und wie baust du den die Verbindung zur Datenbank auf, dein Login Objekt scheint zwar eine MySqlConnection zu haben, aber wie sieht der Connection State aus, ist der auf Closed? Ist der string externalip gesetzt?

Außerdem solltest du noch mal dein SQL Befehl anpassen. Statt mit * solltest du die Spalten explizit angeben, diesem Fall wäre das username und group. Ganz davon abgesehen solltest du noch ein Try Catch Block einbauen.

Ich würde dir mal empfehlen dir mal Dapper anzugucken.

Grüße

Bei mir klingeln die Alarm glocken auch bei folgender Zeile.


MySqlConnection conn = Login.conn;

Hier scheinst du irgendwo die Verbindung aufzubauen und zu halten.
Sowas macht man nicht!
Die Verbindung nur aufbauen, wenn man diese auch braucht und danach schließen.
Dadurch blockierst du auch an anderen Stellen die Verbindung bzw. kann es durch Threading dann sgar knallen.
Für die Lösung dieses Problems nutzt man auch das Connection Pooling, was du über den Connection String einstellen kannst.
Dann kümmert sich der Provider um das Connection Handling.

Hier bitte eine eigene Verbindung aufbauen und diese entweder per using Block oder wenigstens per Dispose Aufruf auch korrekt freigeben nach der Nutzung!

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.

Hier sind ein paar Beispiele mit MySQL : Zugriff auf SQL Compact und MySQL

Probiere dich mit HeidiSQL anzumelden und die Abfrage auszuführen.

Grüße Bernd

Edit : Text geändert weil ich zuerst dachte Du greifst über die externe IP zu.

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