Laden...

XAMARIN MySQL Datenbankverbindung wirft Exception

Letzter Beitrag vor einem Jahr 8 Posts 1.152 Views
XAMARIN MySQL Datenbankverbindung wirft Exception

Hallo liebe Mitentwickler,

Ich bin dabei eine kleine App in Xamarin zu schreiben und mochte mit dieser nun eine MySQL datenbankverbindung aufbauen und einfach einen Simplen String aus einer Tabellenspalte (Typ VARCHAR) in einem Simplen DisplayAlert() wiedergeben lassen.

Nun wirft mir VS2019 folgende Exception "the type initializer for 'mysql.data.mysqlclient.replication.replicationmanager' threw an exception.".

Ich nutze ein von mir entwickeltes Framework (KFrame) in welchem meine MySQL Methoden implementiert sind. (hat auch immer funktioniert)


// _db.IsConnected() prüft ob eine Verbindung zur datenbank aufgebaut werden konnte (gibt true oder false zurück)
// object _db.GetValue(int,string) ruft den wert aus der datenbank ab
// else ist zu debug zwecken unbelegt
           _db = new KFrameMob.Network.Database.MySQL("dummyserver", "Database", "Username", "Password"); // 
            if(_db.IsConnected())
            {
                DisplayAlert("Meldung",(string)_db.GetValue(1, "select * from app where id='1'"),"Verstanden!");
            }
            else
            {

            }

Ich habe einen Thread in einem anderen Forum mit dem Problem gefunden allerdings ist das hier scheinbar nicht die lösung
Fehler beim Aufbau einer MySQL Verbindung - breadfish.de - DIE deutschsprachige GTA-Community

Vielen Dank für die hilfe im vorraus

un wirft mir VS2019 folgende Exception "the type initializer for 'mysql.data.mysqlclient.replication.replicationmanager' threw an exception.".

Und was steht in der Exception? Die hat ne Message und nen Stacktrace.

Aber Hinweis: Apps sollten nicht direkt auf Datenbanken zugreifen, vor allem aus Sicherheitsgründen nicht.
Datenbanken sollten nicht direkt über das Internet verfügbar sein, sondern es sollte ein Service (HTTP / gRPC / REST / GraphQL...) dazwischen hängen.
Die Grundarchitektur nennt sich hier Backend for Frontend, wobei Frontend der Platzhalter für jede Art von Web-Client ist.

Apps müssen davon abgesehen asynchron programmiert werden, denn wenn der Haupt-Thread zu lange blockiert (weniger hundert Millisekunden), schießt die mobile Runtime (iOS / Android..) die App ab.

vielen dank für die Antwort.

Da gebe ich dir recht und es existiert auch bereits ein Web-Backend mit einer Asyncronen verarbeitung welche mit JSON arbeitet.

Ich will nur testen ob es auch so funktioniert.

In der das ist das die Exception message. Auch bei MS ist das scheinbar nicht näher erläutert. Zumindest hab ich das nicht gefunden. Es gibt zwar google redults aber die bringen mich auch nicht wirklich weiter.

Die Exception wird bereits ausgelöst wenn die Methode Open() von MySqlConnect aaufgerufen wird. An der verbindung kann es abef nicht liegen da andefe clients die verbindung aufbauen können.

Ich will nur testen ob es auch so funktioniert.

In der Theorie geht alles, aber es bleibt Zeitverschwendung. Das ist das schlechteste, was man tun kann.
Davon abgesehen je nach Daten (GDPR und Co) darf die dazu gehörige Datenbank laut EU-Gesetz nicht direkt im Internet hängen. Es gibt also rechtliche Aspekte (neben dem gesunden Verstand 😉), wieso man sowas nicht tun soll.

Öffentliche Datenbanken mit Username-Password sind das mit Abstand größte Leck von Daten.

In der das ist das die Exception message. Auch bei MS ist das scheinbar nicht näher erläutert.

Unwahrscheinlich, weil diese alleinstehende Exception ohne weitere Infos gibts nicht.
In Deinem Link zB steht zusätzlich

Fehlermeldung:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Das System kann die angegebene Datei nicht finden.

Ist das bei Dir auch der Fall? Wenn ja, dann stimmt was an Deinen Verweisen nicht.

Die Exception wird bereits ausgelöst wenn die Methode Open() von MySqlConnect aaufgerufen wird.

Das spricht dafür, dass eine Abhängigkeit fehlt (oder zB nicht zur Runtime passt), weil beim Open die Abhängigkeiten in diesem Fall (MySQL hat hier unmanaged references) dynamisch nachgeladen werden.
Fehlt was, knallts.

Ok na wenn ich das schon rechtlich nicht darf dann mach ich es auch erst gar nicht. Ich danke dir 🙂

Oder du könntest dem Rat von Abt folgen und das ganze einfach über einen Services anbieten.
Im einfachsten Fall mit einer Http Api wie WebAPI auf REST und Json Basis.
Mit Https hast du dann auch direkt eine sichere Datenübertragung, was man mit Lets Encrypt heute ohne großen Aufwand aufsetzen kann.
Dann ist deine DB sauber auf dem Server ohne äußerliche Zugriffe und dein Service kann sauber durch Authentifizierung den Zugriff kontrolllieren.

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.

Ok na wenn ich das schon rechtlich nicht darf dann mach ich es auch erst gar nicht. Ich danke dir 🙂

Also wie gesagt, die Aussage ist nicht pauschal, sondern das kommt drauf an, welche Daten Du hast.
Weil es gibt da so ne schwammige Klausel, dass Du "einen technisch sicheren Weg" wählen musst - und den wiederum kann man auslegen.
Aber de facto gelten Datenbanken, die direkt im Internet hängen, nie als "pauschal sicher".