2009-06-09 106 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查询很快变得乏味。这样也更容易验证输入。