处理结果 - 处理结果

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

在 ODBC 应用程序中处理结果涉及首先确定结果集的特征,然后使用 SQLBindColSQLGetData 将数据检索到程序变量中。

处理结果

  1. 检索结果集信息。

  2. 如果使用了绑定列,则对每个要绑定的列,调用 SQLBindCol,以将程序缓冲区绑定到该列。

  3. 对于结果集中的每一行:

    • 调用 SQLFetch 以获取下一行。

    • 如果使用绑定列,则在绑定列缓冲区使用现在可用的数据。

    • 如果使用绑定列,在最后一个绑定列后一次或多次调用 SQLGetData 以获取未绑定列的数据。 应以列号的递增顺序调用 SQLGetData

    • 多次调用 SQLGetData 以从 text 或 image 列获取数据。

  4. SQLFetch 通过返回 SQL_NO_DATA 指示到达结果集末尾时,调用 SQLMoreResults 确定是否有其他可用结果集。

    • 如果返回 SQL_SUCCESS,则其他结果集可用。

    • 如果返回 SQL_NO_DATA,则没有其他结果集可用。

    • 如果返回 SQL_SUCCESS_WITH_INFO 或 SQL_ERROR,则调用 SQLGetDiagRec 以确定来自 PRINT 或 RAISERROR 语句的输出是否可用。

      如果将绑定语句参数用于某一存储过程的输出参数或返回值,则使用在绑定参数缓冲区中当前提供的数据。 此外,在使用绑定参数时,对 SQLExecuteSQLExecDirect 的每个调用都将执行 S 次 SQL 语句,其中,S 是绑定参数数组中元素的数目。 这意味着,将存在 S 组要处理的结果,而其中每组结果都由所有结果集、输出参数以及 SQL 语句的单次执行通常返回的返回代码构成。

    备注

    在某一结果集包含计算行时,每个计算行都可作为单独的结果集提供。 这些计算结果集混杂在普通行内,并且将普通行分为多个结果集。

  5. 或者,使用 SQL_UNBIND 调用 SQLFreeStmt 以释放任何绑定列缓冲区。

  6. 如果其他结果集可用,则转到步骤 1。

备注

若要在 SQLFetch 返回 SQL_NO_DATA 之前取消处理结果集,请调用 SQLCloseCursor

另请参阅

检索结果集信息 (ODBC)