直接执行 ODBC

直接执行是最简单的语句执行方式。 提交语句以供执行时,数据源将其编译为访问计划,然后再执行该访问计划。

直接执行通常由在运行时间生成和执行语句的泛型应用程序使用。 例如,以下代码生成一个 SQL 语句,并将其执行一次:

SQLCHAR *SQLStatement;  
  
// Build an SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

直接执行最适合将单次执行的语句。 其主要缺点是每次执行 SQL 语句时都会对该语句进行分析。 此外,在执行语句之前,应用程序无法检索有关语句创建的结果集的信息(如果有);如果语句已准备好并在两个单独的步骤中执行,则有可能执行此操作。

要直接执行语句,应用程序将执行以下操作:

  1. 设置任何参数的值。 有关更多信息,请本部分后面的语句参数

  2. 调用 SQLExecDirect 并将其传递给包含 SQL 语句的字符串。

  3. 调用 SQLExecDirect 时,驱动程序将:

    • 修改 SQL 语句以使用数据源的 SQL 语法,而无需分析语句;这包括替换 ODBC 中的转义序列中讨论的转义序列。 应用程序可以通过调用 SQLNativeSql 来检索 SQL 语句的修改形式。 如果设置了 SQL_ATTR_NOSCAN 语句属性,则不会替换转义序列。

    • 检索当前参数值,并根据需要对其进行转换。 有关更多信息,请本部分后面的语句参数

    • 将语句和转换的参数值发送至数据源以供执行。

    • 返回任何错误。 其中包括排序或状态诊断,如 SQLSTATE 24000(游标状态无效)、如 SQLSTATE 42000 之类的语法错误(语法错误或访问冲突)和 SQLSTATE 42S02 之类的语义错误(找不到基表或视图)。