Identificadores de instrucciones
Una instrucción se considera más fácilmente como una instrucción SQL, como SELECT * FROM Employee. Sin embargo, una instrucción es más que una instrucción SQL: consta de toda la información asociada a esa instrucción SQL, como los conjuntos de resultados creados por la instrucción y los parámetros usados en la ejecución de la instrucción. Ni siquiera es necesario tener una instrucción SQL definida por la aplicación. Por ejemplo, cuando se ejecuta una función de catálogo como SQLTables en una instrucción, ejecuta una instrucción SQL predefinida que devuelve una lista de nombres de tabla.
Cada instrucción se identifica mediante un identificador de instrucción. Una instrucción está asociada a una sola conexión y puede haber varias instrucciones en esa conexión. Algunos controladores limitan el número de instrucciones activas que admiten; La opción SQL_MAX_CONCURRENT_ACTIVITIES en SQLGetInfo especifica cuántas instrucciones activas admite un controlador en una sola conexión. Se define que una instrucción está activa si tiene resultados pendientes, donde los resultados son un conjunto de resultados o el recuento de filas afectadas por una instrucción INSERT, UPDATE o DELETE , o los datos se envían con varias llamadas a SQLPutData.
Dentro de un fragmento de código que implementa ODBC (el Administrador de controladores o un controlador), el identificador de instrucción identifica una estructura que contiene información de instrucciones, como:
El estado de la instrucción
Diagnóstico de nivel de instrucción actual
Las direcciones de las variables de aplicación enlazadas a los parámetros de la instrucción y a las columnas del conjunto de resultados
La configuración actual de cada atributo de instrucción
Los identificadores de instrucciones se usan en la mayoría de las funciones ODBC. En particular, se utilizan en las funciones para enlazar parámetros y columnas del conjunto de resultados (SQLBindParameter y SQLBindCol), preparar y ejecutar sentencias (SQLPrepare, SQLExecute y SQLExecDirect), recuperar metadatos (SQLColAttribute y SQLDescribeCol), recuperar resultados (SQLFetch) y recuperar diagnósticos (SQLGetDiagField y SQLGetDiagRec). También se usan en funciones de catálogo (SQLColumns, SQLTables, etc.) y otras funciones.
Los identificadores de instrucción se asignan con SQLAllocHandle y se liberan con SQLFreeHandle.