2009-06-09 16 views
1

In unserer aktuellen Codebasis verwenden wir MFC-DB-Klassen, um eine Verbindung zu DB2 herzustellen. Dies ist alles alte Code, der uns von einem anderen Entwicklerteam übergeben wurde, daher kennen wir einige der Geschichte, aber nicht alle.Dynamic SQL vs Static SQL

Der Großteil des Codes abstrahiert die Erstellung von SQL-Abfragen durch Funktionen wie Update() und Insert(), die etwas wie "INSERT INTO SCHEMA.TABLE" in eine von Ihnen angegebene Zeichenfolge einfügen. Dies geschieht über die Recordset-Klassen, die oben auf der Datenbank-Klasse

liegen. Die andere Möglichkeit, die SQL-Abfragen auszuführen, besteht darin, sie direkt in der Datenbankklasse mit dbclass.ExecuteSQL (String) auszuführen.

Wir fragen uns, was die Vor- und Nachteile jedes Ansatzes ist. Aus unserer Sicht ist es viel einfacher, den Aufruf von ExecuteSQL() zu machen, da wir keine andere Klasse schreiben müssen, aber es muss gute Gründe geben, den anderen Weg zu gehen. wir sind nur nicht sicher, was sie sind.

Jede Hilfe wäre großartig!

Dank Mark

aktualisieren ----

Ich glaube, ich habe Dynamische und statische SQL falsch verstanden werden. Ich denke, unser Code verwendet immer Dynamic, also wird meine Frage wirklich, sollte ich die SQL-Strings selbst konstruieren und eine ExecuteSQL() ausführen oder sollte dies in einer Klasse für jede Tabelle in der Datenbank abstrahiert werden, so wie die Recordset-Klassen von mfc machen?

+0

Was immer Sie tun, sanieren immer die Werte, die Sie die setzen in SQL-Abfrage, wenn Sie dies nicht bereits tun. Dynamisches SQL ist gegenüber SQL-Injektionen sehr varnbar. Stellen Sie sicher, dass in den Daten nichts enthalten ist, das Ihre SQL-Anweisung ändern könnte. – Skurmedel

Antwort

1

Die ATL OLE DB consumer Datenbank-Klassen sind absolut der Weg zu gehen. Abgesehen von den Risiken der Injektion (von Skurmedel erwähnt) wird es unmöglich, Stapel von string-verketteten Abfragen sehr schnell zu pflegen.

Während die ATL-Klassen zunächst mühsam sein kann, bieten sie den Vorteil der starken typisierten und benannten Spalten, Ergebnis Navigation, Verbindung und Session-Management usw.

0

Ich würde versuchen, es weg zu abstrahieren, wenn es viele SQL-Anweisungen ist. Die Verwaltung Dutzender verschiedener SQL-Abfragen wird schnell langweilig. Außerdem ist es einfacher, Eingaben auf diese Weise zu validieren.