none
Parametrisierte Abfragen RRS feed

  • Frage

  • Hallo,

    wie bereits hier angedeutet, habe ich programmgesteuert eine SQL - Abfrage zusammenbauen lassen. Details würden zu weit führen. So viel: Es klappt exzellent. Ich betreibe eine regelrechte "Rasterfahndung" und am Ende steht der Abfrage-String, der aus Benutzer-Angaben resultiert.

    An weiteren Stellen im Programm geschehen eher unspektakuläre Datenbank - Abfragen, die -selbstverständlich- alle parametrisiert sind, Stichwort "SQL - Injection". Außerdem ist die Schreibweise mit Parametern recht angenehm, da ein haarkleines Zusammenstellen mit Hochkommas, Pluszeichen usw. zuweilen das Gefühl verursacht, als ob ich mir sämtliche Finger brechen würde ;)

    Eingangs erwähnte SQL-Abfrage nun, die programmgesteuert "zusammengebaut" wird, klappt zwar wunderbar, aber sie steht am Ende im Klartext da. Ich sehe keine Möglichkeit zur Verwendung mit Parametern. Es ist nicht vorhersehbar, wie diese Abfrage lauten wird. Es kann sogar sein, dass noch nicht einmal eine "where" Klausel exisitiert.

    Etwas naiv gedacht, hatte ich heute die Idee, diesen gesamten Abfrage String selbst mit einem Parameter zu versehen, um ihn somit auf den Weg zur DB zu schicken. Weiter habe ich gefolgert, dass ich diesen evtl. an eine Stored Procedure geben müsste. Leider habe ich in meinem schlauen Buch und in der MS Doku darüber keinen Hinweis gefunden, wie sowas gehen könnte. Ich habe zwar gesehen, dass man eine Prozedur aufrufen kann mit

    EXEC dbo.meineProzedur Wert
    


    aber wie sicher ist das?

    Andere Ideen?

    Gruß Ron

    Dienstag, 10. Januar 2012 01:50

Antworten

  • Hallo Ron,

    so ganz verstehe ich nicht, was genau Dein Anliegen ist.

    Wie stellst Du Dir vor, eine (beliebige) Abfrage mit Parametern zu versehen?

    Abfragen kann man mit sp_executesql ausführen und dabei auch Parameter mitgeben,
    und wenn man in .NET eine Abfrage mit Parametern versieht geschieht genau das.

    Auf der anderen Seite gilt: Der SQL Server versucht Abfragen wiederzuverwenden,
    siehe Zwischenspeichern und Wiederverwenden von Ausführungsplänen

    Gruß Elmar

     

    • Als Antwort markiert ron61 Freitag, 13. Januar 2012 23:27
    Dienstag, 10. Januar 2012 22:01

Alle Antworten

  • Hallo Ron,

    so ganz verstehe ich nicht, was genau Dein Anliegen ist.

    Wie stellst Du Dir vor, eine (beliebige) Abfrage mit Parametern zu versehen?

    Abfragen kann man mit sp_executesql ausführen und dabei auch Parameter mitgeben,
    und wenn man in .NET eine Abfrage mit Parametern versieht geschieht genau das.

    Auf der anderen Seite gilt: Der SQL Server versucht Abfragen wiederzuverwenden,
    siehe Zwischenspeichern und Wiederverwenden von Ausführungsplänen

    Gruß Elmar

     

    • Als Antwort markiert ron61 Freitag, 13. Januar 2012 23:27
    Dienstag, 10. Januar 2012 22:01
  • siehe Zwischenspeichern und Wiederverwenden von Ausführungsplänen

     

    Hallo Elmar,

    das hilft etwas weiter. Danke für den Tip. Ich hatte zusätzlich auch vor, einiges von der Logik vom Client auf den DB - Server zu übertragen. Das ist mittlerweile geschehen(Ich habe immer wieder diese Empfehlung gelesen, da ist was dran). Ich bin überrascht, wie viel Code ich auf dem Client einsparen kann, bei gleichzeitiger Performance-Steigerung.

    Mein "SQL-Abfrage-Bandwurm" Problem stelle ich vorläufig zurück. Gut möglich, dass sich bald neue Aspekte ergeben, die das Problem erschlagen, da die volle Funktionalität meines Projekts zwar ich Reichweite ist, aber noch etwas Denkarbeit benötigt.

    Momentan bin ich mit dem Thema Sicherheit auf dem Server beschäftigt, DB-Rollen, Benutzer, Anmeldung usw... Daher die verspätete Rückmeldung.

    Gruß und schönes Wochenende

    Ron

    Freitag, 13. Januar 2012 23:05