Поделиться через


Дескрипторы инструкций

Инструкцию проще всего рассматривать как инструкцию 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.