c++ - 动态 SQL 与静态 SQL

标签 c++ mfc db2

在我们当前的代码库中,我们使用 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/

相关文章:

用于整数三角函数的 C++ 库,使用可选近似值优化速度?

c++ - 如何在常规窗口中打开MFC应用程序

java - Db2 表的 DDL 生成

jdbc - DB2 JDBC 事务大小有限制吗?

c++ - 从像素获取 RGB 值并将 RGB 值设置回同一像素

mysql - 如何只更新 DB2 中的一条记录?

c++ - "sizeof"一个类或对象可以为零吗?

C++/Qt TestLib 以编程方式获取类中的函数数

c++ - 将角度映射到 RGB 颜色

c++ - 我可以在不使用其 UI 框架的情况下将 Qt 用作 C++ 库吗