【发布时间】:2011-07-22 16:08:48
【问题描述】:
例如,Delphi 有组件 TADOQuery、TADOStoredProcedure、TADOtable。
它们代表嵌入式 SQL 吗??
嵌入式 SQL 和只在编程语言中使用 SQL 有什么区别??
【问题讨论】:
-
不是关于嵌入式系统的编程。重新标记。
例如,Delphi 有组件 TADOQuery、TADOStoredProcedure、TADOtable。
它们代表嵌入式 SQL 吗??
嵌入式 SQL 和只在编程语言中使用 SQL 有什么区别??
【问题讨论】:
不,TADO* 不是嵌入式 SQL。
嵌入式 SQL 是一种(主要是过时的)技术,您可以在代码中编写特殊分隔的 SQL,并使用预处理应用程序将其转换为直接 DB API 调用。
如果您愿意,可以在Chapter 14 of the InterBase Embedded SQL guide [PDF] 中阅读相关内容。
【讨论】:
TADO* 不需要预处理器。它们是如何工作的?情况很复杂。然而,在链的末端,它们使用 DB 的 DSQL API。
不,那些 Delphi 组件不是嵌入式 SQL。在嵌入式 SQL 中,SQL 语句与常规代码混合在一起,我所知道的最常见的形式是 ESQL/C。它应该被视为已弃用。
它的工作方式是将所有与 SQL 相关的内容翻译成宿主语言的预处理器,并且预翻译的代码通过宿主语言编译器提供。
一个基于 PostgreSQL 的 ESQL/C 实现的小片段:
void showesql() {
EXEC SQL BEGIN DECLARE SECTION;
int FooBar;
VARCHAR DooDad;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE foo_bar CURSOR FOR
SELECT number, ascii FROM foo
ORDER BY ascii;
EXEC SQL OPEN foo_bar;
EXEC SQL FETCH foo_bar INTO :FooBar, DooDad;
printf ("number is %d and ascii was %s\n",FooBar, DooDad);
EXEC SQL CLOSE foo_bar;
EXEC SQL COMMIT;
}
根据我的经验,使用此类代码非常困难,这就是为什么这种曾经非常常见的技术已被放弃的原因。
【讨论】:
嵌入式 SQL 在您的程序代码中使用 SQL 语句
【讨论】: