2009-06-09 98 views
1

在我們當前的代碼庫中,我們使用MFC db類連接到DB2。這是所有由另一個開發團隊傳給我們的舊代碼,所以我們知道一些歷史,但不是全部。動態SQL與靜態SQL

大部分代碼通過諸如Update()和Insert()之類的函數,將諸如「INSERT INTO SCHEMA.TABLE」之類的函數提取到您提供的字符串中,從而抽象SQL查詢的創建。這通過位於數據庫類頂部的記錄集類來完成

執行SQL查詢的另一種方法是使用dbclass.ExecuteSQL(String)在數據庫類上直接執行它們。

我們想知道每種方法的特點和缺點。從我們的角度來看,執行ExecuteSQL()調用要容易得多,因爲我們不需要編寫另一個類等,但是必須有充分的理由去做另一種方式。我們只是不確定它們是什麼。

任何幫助將是偉大的!

感謝馬克

更新----

我想我可能誤解了動態和靜態SQL。我認爲我們的代碼總是使用Dynamic,所以我的問題真的變成了,我應該自己構造SQL字符串並執行ExecuteSQL(),或者應該在數據庫中的每個表的類中抽象出它,因爲來自mfc的記錄集類似乎去做?

+0

不管你做什麼,總是消毒你把該值SQL查詢,如果你還沒有做。動態SQL對SQL注入非常有效。確保數據中沒有任何內容會改變你的SQL語句。 – Skurmedel 2009-06-09 08:00:19

回答

1

ATL OLE DB consumer數據庫類是絕對要走的路。除了注入的風險(由Skurmedel提到)之外,堆串連接的查詢將不可能很快維護。

雖然ATL類可以初步乏味,他們提供強類型,並命名爲列,結果導航,連接和會話管理等的利益

0

我會盡量抽象它,如果它是很多SQL語句。管理數十個不同的SQL查詢很快變得乏味。這樣也更容易驗證輸入。