verwendetes Datenbanksystem: MySQL with MariaDB
Seit einiger Zeit versuche ich schon ein kleines Problem zu lösen. Ich möchte auf eine MySQL-Datenbank, die sich auf einem Webserver befindet zugreifen. Leider gibt es hier keine direkte Verbindung.
Bisher habe ich dafür C# Form Anwendungen genutzt, die Daten aus der Datenbank über ein serverseitiges PHP-Skript abholen können. Die Datenabfragen werden im JSON-Format zurückgeliefert. Genauso können dann die Daten geändert oder auch neue Datenstäze hinzugefügt werden. Soweit so gut. Diese Methodik läuft gut.
Jetzt möchte ich das Ganze ein bisschen moderner aufziehen und C# WPF nutzen, um die Daten aus der Datenbank anzuzeigen, zu verändern oder neue Datensätze einzufügen. In WPF bestehen Möglichkeiten des Bindings und mit einem SQL-Server auf dem direkter Zugriff besteht funktioniert das auch sehr gut.
Allerdings möchte ich über das Internet kommunizieren und muss über ein Zwischenskript auf die Datenbank zugreifen, da eine direkte Verbindung auf die Datenbank nicht mölgich ist. Wie kann ich in solch einem Fall das Binding von WPF optimal nutzen? Kennt hierfür jemand sehr gute Beispiele, an denen ich mich orientieren kann?
Da es sich bei dem Server um ein NAS-System von Synology handelt, könnte ich auch Anpassungen am Server durchführen um WPF und das Binding möglichst effektiv zu nutzen. Allerdings muss immer auch die Sicherheit gegeben sein.
Falls jemand gute Literatur, gute Tutorial zu einer derartigen Aufgabenstellung hat, wäre ich für jede Information und für jeden Verweis sehr dankbar. Ich habe schon einige Zeit nach etwas geeignetem gesucht, bin aber bisher nicht fündig geworden.
Deine Anbindung sollte, wie voher auch, über eine (Web) API laufen.
Ob diese dann in PHP oder gar C# geschrieben ist, musst du dann entscheiden.
Über das Internet wird NIE direkt auf die DB zugegriffen, damit würdest du deine DB offen ins Netz hängen.
Die Daten würde ich auch, wie bishe über die PHP Api laufen lassen.
Du musst diese dann nur von der Api abrufen und in deine Anwendung lokal vorhalten.
Entweder in einer embedded DB, falls wir hier größere Datenmengen haben ansonsten einfach im RAM.
Das Binding kannst du dann mit einer entsprechenden Modell Klasse machen lassen.
Den optimalen Weg dafür gibt es in der Form nicht, da die Abläufe in den Anwendungen unterschiedlich sind und auch von Fall zu Fall variieren können.
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.
Ergänzend zu dem, was T-Virus gesagt hat, eventuell:
Würde ich an deiner Stelle, je nach dem wie groß das Projekt ist, es über den MVVM-Pattern umsetzen um zukünftige "auslagerung, erweiterung o.d." sauberer und eleganter handzuhaben.
@behindyoû
Das Pattern ergibt sich schon daraus, dass er mit WPF arbeitet.
Es anders zu lösen macht technisch keinen/wniger Sinn, da WPF ja gerade auf MVVM aufbaut.
T-Vius
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.
Sofern dein NAS System es unterstützt könntest du eine API auch in C# entwerfen und so verbinden.
Vielen Dank für die vielen nützlichen Hinweise und Tipps. Inwieweit das Synology NAS C# unterstützt weiß ich leider nicht. Um auf dieser Seite keine neue Baustelle zu eröffnen, werde ich vorerst erst einmal bei PHP bleiben.
Bezüglich der Datenübermittlung werde ich das ähnlich machen wie bisher und die Daten im Arbeitsspeicher als Listen vorhalten. Diese Observable Listen können sich dann wunderbar mit den WPF Steuerelementen wie z.B. das Gridview Element synchronisieren. Das hat auch bei den ersten Tests schon ganz gut funktioniert.
Die Synologys unterstützen Docker und damit jeder Art von Applikation, die im Docker-Container laufen kann.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code