Был ли создан результирующий набор данных?

В большинстве случаев программисты приложений знают, будут ли инструкции, выполняемые приложением, создавать результирующий набор. Это происходит, если приложение использует жестко закодированные инструкции SQL, написанные программистом. Обычно это бывает, когда приложение формирует SQL-запросы во время выполнения: программист может легко добавить код, который определяет, какой именно оператор формируется — SELECT или INSERT. В некоторых случаях программист никак не может знать, будет ли инструкция возвращать результирующий набор. Это верно, если приложение предоставляет пользователю способ ввода и выполнения инструкции SQL. Это также верно, если приложение создает инструкцию во время выполнения для выполнения процедуры.

В таких случаях приложение вызывает SQLNumResultCols , чтобы определить количество столбцов в результирующем наборе. Если это значение равно 0, оператор не создал набор результатов; если это любое другое число, оператор создал набор результатов.

Приложение может вызывать SQLNumResultCols в любое время после подготовки или выполнения инструкции. Однако, поскольку некоторые источники данных не могут легко описать результирующие наборы, созданные подготовленными инструкциями, производительность будет страдать, если sqlNumResultCols вызывается после подготовки инструкции, но перед выполнением.

Некоторые источники данных также поддерживают определение количества строк, возвращаемых инструкцией SQL в результирующем наборе. Для этого приложение вызывает SQLRowCount. То, что именно означает число строк, определяется значением параметра SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 или SQL_STATIC_CURSOR_ATTRIBUTES2 (в зависимости от типа курсора), возвращаемым вызовом SQLGetInfo. Эта битовая маска указывает для каждого типа курсора, является ли возвращаемое число строк точным, приблизительным или недоступным вообще. Влияет ли на количество строк для статических курсоров или курсоров, управляемых набором ключей, изменения, внесённые с помощью SQLBulkOperations или SQLSetPos, а также операторами позиционированного обновления или удаления, зависит от других битов, возвращаемых теми же аргументами параметров, перечисленными ранее. Дополнительные сведения см. в описании функции SQLGetInfo .