2009-06-09 68 views
1

現在のコードベースでは、MFC dbクラスを使用してDB2に接続しています。これは、別の開発チームによって私たちに渡されたすべての古いコードなので、歴史の一部を知っていますが、すべてではありません。動的SQLと静的SQL

コードのほとんどは、あなたが提供する文字列に "INSERT INTO SCHEMA.TABLE"のようなものを追加するUpdate()やInsert()などの関数を通じてSQLクエリの作成を抽象化しています。これは、データベースクラスの上部にあるレコードセットクラスを介して行われます

SQLクエリを実行するもう1つの方法は、dbclass.ExecuteSQL(String)を使用してデータベースクラスで直接実行することです。

私たちはそれぞれのアプローチのプロと欠点が何であるか疑問に思っています。私たちの観点からは、ExecuteSQL()呼び出しをもっと簡単に行うことができます。別のクラスなどを書く必要はありませんが、他の方法を行うには十分な理由が必要です。彼らが何であるかはわかりません。

助けがあれば助かります。

マーク

更新----

おかげで、私は動的および静的SQLを誤解しているかもしれないと思います。私は私のコードは、常に自分のSQL文字列を自分で作成し、ExecuteSQL()を行うか、これは、mfcからのレコードセットクラスとして、データベース内の各テーブルのクラスで抽象化する必要があります私のコードは、常にダイナミックを使用すると思う何をする?

+0

、いつもあなたがに入れた値をサニタイズあなたがまだしていない場合は、SQLクエリ。動的SQLはSQLインジェクションに対して非常に強力です。 SQL文を変更する可能性のあるデータがないことを確認します。 – Skurmedel

答えて

1

ATL OLE DB consumerデータベースクラスは、絶対に行く方法です。注射のリスク(Skurmedelに言及されている)のほかに、文字列連結クエリの束は非常に迅速に維持することが不可能になります。何をするにしても

ATLクラスは、最初は面倒になることができますが、彼らはtyped-強いと名付けられた列、結果のナビゲーション、接続およびセッション管理の利点を提供する、など

0

多くのSQL文であれば、それを抽象化しようとします。数多くの異なるSQLクエリを管理することは、すぐに退屈になります。また、その方法で入力を検証する方が簡単です。