.NET SQL-Abfrage ohne direkten SQL-Zugriff

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von bambius.

    .NET SQL-Abfrage ohne direkten SQL-Zugriff

    Hallo liebe Gemeinde,

    ich stehe gerade irgendwie an. Hab schon ziemlich gesucht aber finde wohl nicht die richtigen Suchbegriffe.

    Folgendes Szenario: Derzeit habe ich eine (noch) vb.NET Anwendung (Windows-Forms) welche u.a. eine simple SELECT-Abfrage am SQL-Server ausführt. Damit sollen am Client diverse Meldungen wie Wartungsarbeiten oder Störungen angezeigt werden. Das läuft derzit auf x100 Clients ohne Probleme.
    Nun sind aber die Admins vom SQL-Cluster auf mich zugekommen und haben mich gebeten dies so umzuschreiben dass die Clients nicht direkt auf den SQL zugreife sondern ein Webservice oder sowas dazwischen schalte. Weil die eben x100e Session von verschiedensten Clients am SQL-Server haben und bei einer Fehleranalyse bei einer anderen Applikation sich schwer tun die richtigen Verbindngen raus zu suchen.

    Ich hatte jetzt folgende Ideen:
    • Ein Webservice das als Proxy dient und die Anfragen 1:1 an den SQL durch reicht. Damit gibts zumindest nur noch ein Server von dem die Sessions kommen.
    • Ein Webservice das die Verbindung zwar grundsätzlich auch 1:1 durch reicht aber das Ergebnis für andere Clients cached.
    • Ein Webservice/Windows-Service das selber laufend den SQL abfragt und die Clients über eine Push-Funktion im Falle einer neuen Nachricht informiert.

    Gut, der 1. Punkt sollte wohl recht einfach umzusetzen sein, gefällt mir aber nicht so richtig. Für die anderen beiden Punkte habe ich aber keine Idee wie ich das am besten umsetzen könnte.

    Gibt es da vielleicht Tutorials oder Bücher wo beschrieben ist wie man solche Client-Server-Szenarien nach dem neuesten Stand der Technik umsetzt? Entweder mit vb.Net oder C#.


    Für Tipps wäre ich Euch sehr dankbar!

    Liebe Grüße,
    Christian
    Was mir so spontan einfällt, wäre ein folgendes: Einen kleinen lokalen webserver aufsetzten, auf dem ein php script läuft , dass per GET das SQL Query bekommt und dann eine DB connection zu deinem SQL Server aufbautund die Abfrage durchführt.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    bambius schrieb:

    Nun sind aber die Admins vom SQL-Cluster auf mich zugekommen und haben mich gebeten dies so umzuschreiben dass die Clients nicht direkt auf den SQL zugreife sondern ein Webservice oder sowas dazwischen schalte. Weil die eben x100e Session von verschiedensten Clients am SQL-Server haben und bei einer Fehleranalyse bei einer anderen Applikation sich schwer tun die richtigen Verbindngen raus zu suchen.
    Klingt mir nach einer unerhörten Zumutung.
    Weil einen Webservice schiebt man glaub nicht einfach mal so dazwischen, sondern das bedeutet einen Komplett-Rewrite des Data-Layers. Und falls deine Anwendung bislang ohne ausgewiesenes Schichtenmodell auskommt, bedeutet das halt einen Komplett-Rewrite.
    Lass es über einen Webserver laufen, der dann die Daten zur Datenbank schickt, dies bietet dir viele Vorteile:

    - Wenn man dein Programm dekomprimiert, dann kommt man nicht an deine Datenbank Daten..
    - Du kannst den String der an die Datenbank übertragen wird, nochmal auf MYSql Injection prüfen.
    - Die Server-Side Kommandos einbauen, die nur du mit dem Script aufrufen kannst.
    Hallo,

    Sodala, frisch vom Urlaub zurück :)

    D.h. Ihr empfiehlt mir Variante 1, also eine Query an das Webservice und das holt die Daten aus der Datenbank und sendet diese zurück. Vom Aufwand her ist das glaub ich eh schnell erledigt, also ein komplettes Rewrite vom Code ist es nicht.

    Wie sieht es mit Variante 2 aus? Gibt es da eine Möglichkeit?

    bambius schrieb:

    Wie sieht es mit Variante 2 aus?
    Was ist bei dir Variante 2?

    bambius schrieb:

    Ein Webservice das die Verbindung zwar grundsätzlich auch 1:1 durch reicht aber das Ergebnis für andere Clients cached.
    Wenn ich das richtig verstanden habe, willst du das gesamte SQL-Statement vom Client erzeugen lassen und dieses vom Server ausführen lassen?
    Das bedeutet, dass jeder, der sich an den Server verbinden kann (auch mit anderen Programmen), im Namen des Proxy beliebige SQL-Statements auf der DB ausführen kann.
    Mir persönlich wäre das zu heikel.
    Ein Webservice das die Verbindung zwar grundsätzlich auch 1:1 durch reicht aber das Ergebnis für andere Clients cached.
    Das wäre machbar, wenn die Ergebnisse sich zwischen den Calls nicht verändern.
    Du hast dann keine Live-Abfragen mehr.
    Ein Webservice/Windows-Service das selber laufend den SQL abfragt und die Clients über eine Push-Funktion im Falle einer neuen Nachricht informiert.
    Das nimmst damit Last von den Clients und erzeugst hohe Last auf der DB. Dein DB-Admin wird nicht begeistert sein.

    Wenn die Variationen der SQL-Calls endlich sind, würde ich einen SOAP-Webservice schreiben, der die erlaubten Abfragen implementiert und diese beim Aufruf per SQL von der DB abfragt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Hallo petaod,

    spät aber doch, Danke für die Antwort. War die letzten Monate leider durch ein anderes Projekt ziemlich ausgelastet, deshalb sorry für die späte Rückmeldung.

    Dein letzter Vorschlag mit dem SOAP-Webservice gefällt mir, werde mich da mal rein arbeiten.