Дескрипторы инструкций
Инструкция является наиболее легкой инструкцией SQL, например SELECT * FROM Employee. Однако инструкция является не просто инструкцией SQL— она состоит из всех сведений, связанных с этой инструкцией SQL, таких как все результирующие наборы, созданные инструкцией и параметрами, используемыми в выполнении инструкции. Оператор даже не должен иметь инструкцию SQL, определяемую приложением. Например, если функция каталога, например SQLTables , выполняется в инструкции, она выполняет предопределенную инструкцию SQL, которая возвращает список имен таблиц.
Каждая инструкция определяется дескриптором инструкции. Оператор связан с одним подключением, и в этом соединении может быть несколько операторов. Некоторые драйверы ограничивают количество активных инструкций, которые они поддерживают; Параметр SQL_MAX_CONCURRENT_ACTIVITIES в SQLGetInfo указывает, сколько активных инструкций, поддерживаемых драйвером в одном подключении. Оператор определяется как активный, если он имеет результаты, ожидающие, где результаты являются результирующий набор или количество строк, затронутых инструкцией INSERT, UPDATE или DELETE, или данные отправляются с несколькими вызовами SQLPutData.
В фрагменте кода, реализующего ODBC (диспетчер драйверов или драйвер), дескриптор инструкции определяет структуру, содержащую сведения о операторе, например:
Состояние оператора
Диагностика текущего уровня инструкций
Адреса переменных приложения, привязанных к параметрам инструкции и столбцам результирующего набора
Текущие параметры каждого атрибута инструкции
Дескриптора инструкций используются в большинстве функций ODBC. В частности, они используются в функциях для привязки параметров и столбцов результирующего набора (SQLBindParameter и SQLBindCol), подготовки и выполнения инструкций (SQLPrepare, SQLExecute и SQLExecDirect), получения метаданных (SQLColAttribute и SQLDescribeCol), получения результатов (SQLFetch) и получения диагностика (SQLGetDiagField и SQLGetDiagRec). Они также используются в функциях каталога (SQLColumns, SQLTables и т. д.) и ряде других функций.
Дескриптор инструкций выделяется с помощью SQLAllocHandle и освобождается с помощью SQLFreeHandle.