Best Practices für Inline-SQL-Abfragen

8

Ich arbeite mit einer asp.net-Website, die viele Inline-SQL-Abfragen verwendet ... und ich frage mich, ob es am besten ist, die Inline-Abfragen im laufenden Betrieb zu erstellen:

%Vor%

Oder eine Klasse haben, die alle für die Anwendung benötigten Abfragen enthält. Etwas wie das:

%Vor%

Danke!

    
user1481183 05.10.2012, 16:04
quelle

8 Antworten

7

Ich habe zu meiner Zeit viele ADO.NET-Abfragen verwendet, und ich habe immer die erste Methode verwendet. Die zweite Methode ist eine interessante Idee, aber es kann mühsam sein, diese Abfragen zu bearbeiten, wenn Sie sich an einer anderen Stelle im Code befinden, der sie verwendet. Es macht es auch schwieriger zu sehen, was eine Abfrage an einer bestimmten Stelle im Code macht. Beispiel:

%Vor%

sagt einem Entwickler, was passiert, während:

%Vor%

Hinterlässt Fragen darüber, welche Tabelle / Spalten aktualisiert werden. Mit dem ersten wissen Sie genau, welche Parameter hinzugefügt werden müssen.

Wenn Sie diese Abfrage an mehreren Stellen schreiben, die Dinge ändern könnten

    
Abe Miessler 05.10.2012, 16:11
quelle
5

Es ist nicht schrecklich, das Literal direkt in die Methode einzufügen, solange Sie immer dieselbe Methode aufrufen, wenn Sie diese Abfrage ausführen möchten. Wenn Sie jedoch das Zeichenfolgenliteral an mehrere Stellen in Ihrem Code kopieren möchten, wird eine Konstante definitiv bevorzugt. Anstatt eine Zeichenfolge als Argument für die Query-Methode in Ihrem zweiten Beispiel zu verwenden, sollte sie jedoch einen Enumerationswert enthalten.

Wenn Sie jedoch die zweite beschriebene Methode verwenden, würde ich Sie fragen, warum Sie nicht einfach nur gespeicherte Prozeduren verwenden?

    
Steven Doggart 05.10.2012 16:08
quelle
4

Ich würde empfehlen, gespeicherte Prozeduren als eine viel bessere Lösung für Ihr Problem zu verwenden, als hartcodierte Inline-Abfragen. Wenn Sie die Abfrage zu einem späteren Zeitpunkt ändern müssen, müssen Sie Ihre Anwendung nicht neu erstellen, sodass Fehler in Ihrer Abfrage behoben werden können, ohne dass die gesamte Anwendung bereitgestellt werden muss. Die zweite Option, die Sie dort haben, ist ein Wartungs-Albtraum, der auf Sie wartet. Es sieht alles so gut aus, wenn Sie ein oder zwei Abfragen darin haben, aber das fängt an, etwas hässlicher auszusehen, wenn Sie Zehner oder Hunderter drin haben. Ihr Code sieht aus wie c #, daher würde ich empfehlen, die Microsoft Enterprise Library auszuprobieren,

Ссылка

Je nachdem, mit welcher Version des .NET-Frameworks Sie arbeiten, müssen Sie möglicherweise eine andere Version herunterladen.

    
Eric 05.10.2012 16:22
quelle
0

Ich denke, es ist in Ordnung, die Abfragen "inline" zu haben, solange sie nicht an mehreren Stellen wiederholt werden. Wenn dies geschieht, sollten Sie mit dem Erstellen von Abfrageklassen beginnen.

    
BlakeH 05.10.2012 16:08
quelle
0

In beiden Fällen erstellen / holen Sie String , die Sie an CommandText übergeben. Also würde es keinen solchen Unterschied geben. Was Sie in Ihrem Fall beachten müssen, ist, wie Sie den Code pflegen oder wie andere Ihren Code verstehen.

    
Luftwaffe 05.10.2012 16:11
quelle
0

Wenn Sie Inline-SQL verwenden werden, fügen Sie es zumindest nicht in den Webseitencode ein, da es schmerzhaft sein wird, wenn Sie Datenbankänderungen vornehmen, um zu wissen, was es betrifft. Wenn Sie alle Abfragen in einer Klasse zusammenfassen, ist das vielleicht etwas unorganisiert. Wenn Sie sie jedoch nach funktionalen Klassen (wie Manager-Klassen für Ihre Geschäftsobjekte) gruppieren, ist es möglicherweise einfacher, sich damit zu befassen.

    
d89761 05.10.2012 16:21
quelle
0

Wenn Sie absolut "inline" sql im Gegensatz zu gespeicherten Prozeduren haben müssen (und das habe ich für Utility-Anwendungen getan, die lediglich mit einer Datenbank interagieren anstatt mit eigenen it), würde ich vorschlagen, dass Sie Ihr SQL in eine eingebettete Ressourcendatei einfügen. Dadurch werden Ihre Abfragen einfacher zu verwalten (Sie müssen jedoch Ihre App erneut kompilieren, um Änderungen vorzunehmen).

    
James Curtis 05.10.2012 16:27
quelle
0

Wenn Ihre Abfragen länger als eine oder zwei Zeilen sind, sollten Sie sie in eine eigene .sql-Datei einfügen. Setzen Sie die Erstellungsaktion für die Datei auf die eingebettete Ressource und greifen Sie mit einem Aufruf von GetManifestResourceStream () darauf zu. Auf diese Weise heben Sie Ihren SQL-Server in den Status einer richtigen Sprache mit Syntax-Hervorhebung, Validierung und Intellisense (wenn Sie VS mit Ihrer Datenbank verbinden). Unnötig zu erwähnen, dass dies die Wartung enorm erleichtert.

Wenn Ihnen das alles ein wenig lästig erscheint, greifen Sie zu meiner VS-Erweiterung QueryFirst . Erstellen Sie Ihre .sql-Dateien mit der bereitgestellten Vorlage und sie werden automatisch für die Kompilierung verdrahtet. Aber es ist Ihnen egal, weil Sie nur über die generierten Klassen auf die Abfragen zugreifen.

Sql ist die einzige Computersprache, die ich mir vorstellen kann, die wir in String-Literalen zerhackt sehen. Es sollte ein Skandal sein.

    
bbsimonbb 30.05.2016 12:48
quelle