Condividi tramite


Modifiche del comportamento e driver ODBC 3.x

L'attributo di ambiente SQL_ATTR_ODBC_VERSION indica al driver se deve presentare il comportamento ODBC 2.x o ODBC 3.x . Il modo in cui viene impostato l'attributo di ambiente SQL_ATTR_ODBC_VERSION dipende dall'applicazione. Le applicazioni ODBC 3.x devono chiamare SQLSetEnvAttr per impostare questo attributo dopo aver chiamato SQLAllocHandle per allocare un handle di ambiente e prima di chiamare SQLAllocHandle per allocare un handle di connessione. In caso contrario, Gestione driver restituisce SQLSTATE HY010 (errore della sequenza di funzioni) nella seconda chiamata a SQLAllocHandle.

Nota

Per altre informazioni sulle modifiche comportamentali e sul funzionamento di un'applicazione, vedere Modifiche comportamentali.

Le applicazioni ODBC 2.x e le applicazioni ODBC 2.x ricompilate con i file di intestazione ODBC 3.x non chiamano SQLSetEnvAttr. Tuttavia, chiamano SQLAllocEnv anziché SQLAllocHandle per allocare un handle di ambiente. Pertanto, quando l'applicazione chiama SQLAllocEnv in Gestione driver, Gestione driver chiama SQLAllocHandle e SQLSetEnvAttr nel driver. Pertanto, i driver ODBC 3.x possono sempre contare su questo attributo impostato.

Se un'applicazione conforme agli standard compilata con il flag di compilazione ODBC_STD chiama SQLAllocEnv (che può verificarsi perché SQLAllocEnv non è deprecato in ISO), la chiamata viene mappata a SQLAllocHandleStd in fase di compilazione. In fase di esecuzione, l'applicazione chiama SQLAllocHandleStd. Gestione driver imposta l'attributo SQL_ATTR_ODBC_VERSION environment su SQL_OV_ODBC3. Una chiamata a SQLAllocHandleStd equivale a una chiamata a SQLAllocHandle con handleType di SQL_HANDLE_ENV e una chiamata a SQLSetEnvAttr per impostare SQL_ATTR_ODBC_VERSION su SQL_OV_ODBC3.

In alcune architetture di driver, è necessario che il driver venga visualizzato come driver ODBC 2.x o odbc 3.x , a seconda della connessione. Il driver in questo caso potrebbe non essere effettivamente un driver, ma un livello che risiede tra Gestione driver e un altro driver. Ad esempio, potrebbe simulare un driver, ad esempio ODBC Spy. In un altro esempio può fungere da gateway, ad esempio EDA/SQL. Per essere visualizzato come driver ODBC 3.x , tale driver deve essere in grado di esportare SQLAllocHandle e di apparire come driver ODBC 2.x , deve essere in grado di esportare SQLAllocConnect, SQLAllocEnv e SQLAllocStmt. Quando un ambiente, una connessione o un'istruzione deve essere allocata, Gestione driver verifica se questo driver esporta SQLAllocHandle. Poiché il driver esegue questa operazione, Gestione driver chiama SQLAllocHandle nel driver. Se il driver usa un driver ODBC 2.x , il driver deve eseguire il mapping della chiamata a SQLAllocHandle a SQLAllocConnect, SQLAllocEnv o SQLAllocStmt, a seconda delle esigenze. Non deve inoltre eseguire alcuna operazione con la chiamata SQLSetEnvAttr quando si comporta come driver ODBC 2.x .

Questa sezione descrive gli argomenti seguenti: