Handle di istruzione

Un'istruzione viene considerata più facilmente come un'istruzione SQL, ad esempio SELECT * FROM Employee. Tuttavia, un'istruzione è più di una semplice istruzione SQL: è costituita da tutte le informazioni associate a tale istruzione SQL, ad esempio tutti i set di risultati creati dall'istruzione e i parametri usati nell'esecuzione dell'istruzione. Un'istruzione non deve nemmeno avere un'istruzione SQL definita dall'applicazione. Ad esempio, quando viene eseguita una funzione catalogo, come SQLTables, in un'istruzione, questa esegue un'istruzione SQL predefinita che restituisce un elenco di nomi di tabelle.

Ogni istruzione viene identificata da un handle di istruzione. Un'istruzione è associata a una connessione unica e su tale connessione possono essere presenti più istruzioni. Alcuni driver limitano il numero di istruzioni attive supportate; l'opzione SQL_MAX_CONCURRENT_ACTIVITIES in SQLGetInfo specifica il numero di istruzioni attive supportate da un driver in una connessione unica. Un'istruzione viene definita come attiva se contiene risultati in sospeso, dove i risultati sono un set di risultati o il numero di righe interessate da un'istruzione INSERT, UPDATE o DELETE oppure i dati vengono inviati con più chiamate a SQLPutData.

All'interno di un frammento di codice che implementa ODBC (Gestione driver o un driver), l'handle di istruzione identifica una struttura che contiene informazioni sull’istruzione, ad esempio:

  • Stato dell'istruzione

  • Diagnostica a livello di istruzione corrente

  • Indirizzi delle variabili dell'applicazione associate ai parametri dell'istruzione e alle colonne del set di risultati

  • Impostazioni attuali di ogni attributo di istruzione

Gli handle di istruzione vengono usati nella maggior parte delle funzioni ODBC. In particolare, vengono usati nelle funzioni per associare parametri e colonne del set di risultati (SQLBindParameter e SQLBindCol), preparare ed eseguire istruzioni (SQLPrepare, SQLExecute e SQLExecDirect), recuperare i metadati (SQLColAttribute e SQLDescribeCol), recuperare i risultati (SQLFetch) e recuperare la diagnostica (SQLGetDiagField e SQLGetDiagRec). Vengono usati anche nelle funzioni catalogo (SQLColumns, SQLTables e così via) e in una serie di altre funzioni.

Gli handle di istruzione vengono allocati con SQLAllocHandle e liberati con SQLFreeHandle.