是否创建了一个结果集?

在大多数情况下,应用程序的程序员知道其应用程序执行的语句是否会创建结果集。 如果应用程序使用程序员编写的硬编码 SQL 语句,就会出现这种情况。 应用程序在运行时构造 SQL 语句时通常是这种情况:程序员可以轻松地包含用于标记正在构造 SELECT 语句还是 INSERT 语句的代码。 在少数情况下,程序员可能不知道语句是否会创建结果集。 如果应用程序为用户提供了一种输入和执行 SQL 语句的方法,就会出现这种情况。 当应用程序在运行时构造语句以执行过程时也是如此。

在这种情况下,应用程序会调用 SQLNumResultCols 来确定结果集中的列数。 如果为 0,则语句未创建结果集;如果是任何其他数字,则语句确实创建了一个结果集。

应用程序可以在准备好或执行语句后随时调用 SQLNumResultCols。 但是,由于某些数据源无法轻松描述由准备好的语句创建的结果集,因此,如果在准备语句之后、执行语句之前调用 SQLNumResultCols,性能将受到影响。

某些数据源还支持确定 SQL 语句在结果集中返回的行数。 为此,应用程序会调用 SQLRowCount。 行计数所表示的确切内容由调用 SQLGetInfo 返回的 SQL_DYNAMIC_CURSOR_ATTRIBUTES2、SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2、SQL_KEYSET_CURSOR_ATTRIBUTES2 或 SQL_STATIC_CURSOR_ATTRIBUTES2 选项(取决于游标的类型)的设置表示。 这个位掩码说明每个游标类型返回的行计数是确切的、近似的还是根本不可用的。 静态游标或由键集驱动的游标的行计数是否受到 SQLBulkOperations 或 SQLSetPos 所做更改的影响,或者受到定位更新或删除语句的影响,取决于前面列出的相同选项参数返回的其他位。 有关详细信息,请参阅 SQLGetInfo 函数说明。