EDIT: Nach den Kommentaren zu urteilen, war ich unklar, was ich zu erreichen versuche. Ich werde es aus einem anderen Blickwinkel versuchen.Kann ich SQL mit Parametern innerhalb von Visual Studio ausführen?
Ich habe sprocs für eine Reihe von Jahren entwickelt. Ich habe zunehmend das Gefühl, dass die Wahl zwischen SQL, eingebettet in C# -Code und Sprocs, beide schlechte Entscheidungen sind. Ich weiß, dass viele Leute nicht zustimmen werden, und das ist in Ordnung. Darauf habe ich in der Frage nicht näher eingegangen, um zu vermeiden, dass die Diskussion über Sprocs geführt wird oder nicht :-).
Als ein Experiment habe ich versucht, .sql
Dateien in meinem Projekt in Visual Studio einzubetten. Buchstäblich, in meinem Projektbaum habe ich Dateien mit der .sql
Erweiterung und Build Action
auf Embedded Resource
festgelegt.
So kann ich den SQL-Abfragecode innerhalb von VS bearbeiten und sogar innerhalb von VS ausführen/ausführen, ohne das Projekt auszuführen. Ich liebe das. Der eigentliche Code, an dem ich gerade arbeite, ähnelt einer "Produktliste" mit Paging und mehreren Bestell- und Filteroptionen. Die SQL-Abfrage hat Parameter wie @skip
, @search
usw. Das bedeutet, wenn ich versuche, es innerhalb von VS (insbesondere durch Drücken CTRL + SHIFT + e
oder Auswahl "Ausführen" aus dem Menü "SQL" in VS) ausführen/diese Parameter fehlen (natürlich), da sie zur Laufzeit als SqlParameter
bereitgestellt werden sollen. Ich verstehe , warum dies passiert und keineswegs beabsichtigen zu implizieren, dass entweder VS oder SSMS abgehört wird. Ich bin nur auf der Suche nach einer Möglichkeit VS zu "sagen", dass "Wenn ich diese Abfrage innerhalb von VS ausführen, beabsichtige ich für @skip
zu 10
". Ich (vielleicht irrtümlich) vermutete, dass der Grund dafür, dass VS IntelliSense-Unterstützung und Execute-Unterstützung für .sql
-Dateien hatte, darin bestand, ein Szenario zu unterstützen, das dem ähnlich ist, was ich versuche.
Ich habe nur gehofft, dass jemand anderes das Gleiche macht und einen cleveren Weg/Addon/Trick hat, um es zu unterstützen.
EDIT END
In einem Projekt in Visual Studio 2017 habe ich eine Reihe von SQL-Dateien, die in die Anwendung eingebettet werden, wenn gebaut.
Beim Bearbeiten der Dateien in VS kann ich bequem eine Verbindung zu einem SQL-Server herstellen und die Abfrage ausführen.
Wenn jedoch die Abfrageparameter wie folgt hat:
SELECT * FROM Employee WHERE [email protected];
Die Ausführung, in Visual Studio, nicht mit
Must declare the scalar variable "@ID".
Dies kann „fixiert“ durch eine Linie an der Spitze Zugabe von das Skript/Datei, so dass es wie folgt aussieht:
DECLARE @ID int = 123;
SELECT * FROM Employee WHERE [email protected];
aber jetzt ist es nicht, wenn aus dem Code wie folgt (unter Verwendung von Dapper genannt arbeiten, ist es nicht relevant th Frage e, aber erklärt die Syntax):
var emp = conn.Query<Employee>(sql, new { ID=123 });
Ich habe gehofft, dass ich entweder den Wert der ID angeben könnte irgendwo in der Datei nicht, oder einen Teil der Datei angeben, den VS ausführen würde, würde aber ignoriert später beim Aufruf aus dem Code.
EDIT: Um klar zu sein, kann ich die SQL erstellen, so dass es einwandfrei funktioniert innerhalb von Visual Studio oder zur Laufzeit, aber ich kann nicht beide haben. Ich hatte gehofft, dass es einen ordentlichen Hack, ein VS-Addon oder nur ein VS-Feature gab, das ich gerade vermisste. Ich habe als einen einfachen Pre-Prozessor hinzugefügt, damit ich etwas tun kann:
--if DEBUG
DECLARE @ID int = 123;
--endif
SELECT * FROM Employee WHERE [email protected];
Und dann konnte ich es zu meiner Funktion hinzufügen, die die eingebetteten Ressource lädt.
Kann nicht Sie speichern die SQL auf die Server als gespeicherte Prozeduren? –
könnte ich aber lieber vermeiden. Wir müssen noch eine befriedigende Lösung für die DB-Versionskontrolle finden, also würde ich lieber keinen Code in der DB speichern. Außerdem, wie würde mir das helfen, es in VS zu bearbeiten und auszuführen? –
Mögliches Duplikat von [Abfrage mit Parametern ausführen] (https://stackoverflow.com/questions/11905185/executing-query-with-parameters) –