在我们当前的代码库中,我们使用 MFC 数据库类连接到 DB2。这些都是由另一个开发团队传递给我们的旧代码,因此我们知道一些但不是全部的历史。
大多数代码通过诸如 Update() 和 Insert() 之类的函数抽象出 SQL 查询的创建,这些函数将诸如“INSERT INTO SCHEMA.TABLE”之类的内容添加到您提供的字符串中。这是通过位于数据库类之上的记录集类完成的
执行 SQL 查询的另一种方法是使用 dbclass.ExecuteSQL(String) 直接在数据库类上执行它们。
我们想知道每种方法的优缺点。从我们的角度来看,执行 ExecuteSQL() 调用要容易得多,因为我们不必编写另一个类等,但必须有充分的理由采用其他方式。我们只是不确定它们是什么。
任何帮助都会很棒!
谢谢马克
更新----
我想我可能误解了动态 SQL 和静态 SQL。我认为我们的代码总是使用 Dynamic,所以我的问题真的变成了,我应该自己构造 SQL 字符串并执行 ExecuteSQL() 还是应该将其抽象为数据库中每个表的类,就像 mfc 中的记录集类一样做什么?
最佳答案
ATL OLE DB consumer数据库类绝对是要走的路。除了注入(inject)风险(Skurmedel 提到)之外,成堆的字符串连接查询将变得无法快速维护。
虽然 ATL 类最初可能很乏味,但它们提供了强类型和命名列、结果导航、连接和 session 管理等好处。
关于c++ - 动态 SQL 与静态 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968621/