Aggiornamento da un driver 3.5 a un driver 3.8

In questo argomento vengono fornite linee guida e considerazioni per l'aggiornamento da un driver ODBC 3.5 a un driver ODBC 3.8.

Numeri di versione

Le seguenti linee guida riguardano i numeri di versione:

  • Un driver deve supportare SQL_OV_ODBC3_80 per SQL_ATTR_ODBC_VERSION, restituendo SQL_ERROR per valori diversi da SQL_OV_ODBC2, SQL_OV_ODBC3 e SQL_OV_ODBC3_80. Le versioni future di Gestione driver presuppongono che un driver supporti un livello di conformità ODBC se il driver restituisce SQL_SUCCESS dalla funzione SQLSetEnvAttr.

  • Un driver versione 3.8 dovrebbe restituire 03.80 da SQLGetInfo quando SQL_DRIVER_ODBC_VER viene passato a InfoType. Tuttavia, i Gestione driver più vecchi, inclusi nelle versioni precedenti di Microsoft Windows, considerano il driver come un driver della versione 3.5 ed emettono un avviso.

    In Windows 7 la versione di Gestione driver è 03.80. In Windows 8 la versione di Gestione driver è 03.81 tramite SQLGetInfo SQL_DM_VER (parametro InfoType). SQL_ODBC_VER riporta la versione 03.80 sia in Windows 7 che in Windows 8.

Tipi di dati C specifici del driver

Un driver può avere tipi di dati C personalizzati se lavora con un'applicazione ODBC versione 3.8 (per maggiori informazioni, vedere Tipi di dati C in ODBC). Tuttavia, non è necessario che un driver 3.8 implementi dei tipi C specifici per il driver. Ma il driver deve comunque eseguire la verifica del range dei tipi C; il Driver Manager non lo farà per i driver 3.8. Per facilitare lo sviluppo dei driver, il valore del driver specifico, il tipo di dati C può essere definito nel formato seguente:

SQL_DRIVER_C_TYPE_BASE+0, SQL_DRIVER_C_TYPE_BASE+1  
Tipi di dati specifici del driver, tipi di descrittori, tipi di informazioni, tipi di diagnostica e attributi

Quando si sviluppa un nuovo driver, è consigliabile usare l'intervallo specifico del driver per tipi di dati, tipi di descrittore, tipi di informazioni, tipi di diagnostica e attributi. Gli intervalli specifici del driver e i relativi valori di tipo di base sono descritti in Tipi di dati specifici del driver, tipi di descrittori, tipi di informazioni, tipi di diagnostica e attributi.

Pool di connessioni

Per una migliore gestione del pool di connessioni, ODBC 3.8 introduce l'attributo di connessione SQL_ATTR_RESET_CONNECTION in SQLSetConnectAttr. SQL_RESET_CONNECTION_YES è l'unico valore valido per questo attributo. SQL_ATTR_RESET_CONNECTION sarà impostato appena prima che il Gestione driver inserisca una connessione nel pool di connessioni, consentendo al driver di reimpostare gli altri attributi della connessione ai loro valori predefiniti.

Per evitare comunicazioni inutili con il server, un driver può rimandare l'azzeramento dell'attributo della connessione alla successiva comunicazione con il server remoto, dopo che la connessione è stata riutilizzata dal pool.

Da notare che SQL_ATTR_RESET_CONNECTION viene utilizzato solo nella comunicazione tra il Driver Manager e un driver. Un'applicazione non può impostare direttamente questo attributo. Tutti i driver versione 3.8 devono implementare questo attributo di connessione.

Parametri di output trasmessi

La versione 3.8 di ODBC introduce i parametri di output trasmessi, un modo più scalabile per recuperare i parametri di output (per maggiori informazioni, vedere Recupero di parametri di output tramite SQLGetData). Per supportare questa funzionalità, un driver deve impostare SQL_GD_OUTPUT_PARAMS nel valore restituito quando SQL_GETDATA_EXTENSIONS è InfoType in una chiamata SQLGetInfo. Il supporto per un tipo SQL con parametri di output trasmessi deve essere implementato nel driver. Gestione driver non genera un errore per un tipo di SQL non valido. I tipi SQL che supportano i parametri di output trasmessi vengono definiti nel driver.

Un driver deve restituire SQL_ERROR se l'applicazione usa SQLGetData per recuperare un parametro diverso dal parametro restituito da SQLParamData.

Esecuzione asincrona per le operazioni di connessione (metodo di polling)

Un driver può abilitare il supporto asincrono per diverse operazioni di connessione.

A partire da Windows 7, ODBC supporta il metodo di polling (per maggiori informazioni, vedere Esecuzione asincrona (metodo di polling). Non è necessario un driver ODBC versione 3.8 per implementare operazioni asincrone sugli handle di connessione. Anche se un driver non implementa operazioni asincrone sugli handle di connessione, deve comunque implementare InfoType SQL_ASYNC_DBC_FUNCTIONS e restituire SQL_ASYNC_DBC_NOT_CAPABLE.

Quando le operazioni di connessione asincrone sono abilitate, il tempo di esecuzione di un'operazione di connessione è il tempo totale di tutte le chiamate ripetute. Se l'ultima chiamata ripetuta avviene dopo che il tempo totale ha superato il valore impostato dall'attributo di connessione SQL_ATTR_CONNECTION_TIMEOUT e l'operazione non è terminata, il driver restituisce SQL_ERROR e registra un record diagnostico con SQLState HYT01 e il messaggio "Il timeout della connessione è scaduto". Non esiste alcun timeout se l'operazione è stata completata.

Funzione SQLCancelHandle

ODBC 3.8 supporta la funzione SQLCancelHandle, che viene usata per annullare le operazioni di connessione e di istruzione. Un driver che supporta SQLCancelHandle deve esportare la funzione. Un driver non deve annullare alcuna funzione di connessione sincrona o asincrona in corso se l'applicazione chiama SQLCancel o SQLCancelHandle in un handle di istruzione. Analogamente, un driver non deve annullare alcuna funzione di istruzione sincrona o asincrona in corso se un'applicazione chiama SQLCancelHandle nell'handle di connessione. Inoltre, un driver non deve annullare l'operazione di esplorazione (SQLBrowseConnect restituisce SQL_NEED_DATA) se l'applicazione chiama SQLCancelHandle nell'handle di connessione. In questi casi, un driver deve restituire HY010, "Errore sequenza delle funzioni".

Non è necessario supportare contemporaneamente le operazioni di SQLCancelHandle e di connessione asincrona. Un driver può supportare operazioni di connessione asincrone, ma non SQLCancelHandle o viceversa.

Connessione sospese

Gestione driver ODBC 3.8 può impostare una connessione in stato sospeso. Un'applicazione chiamerà SQLDisconnect per rilasciare le risorse associate alla connessione. In questo caso, un driver deve provare a rilasciare il maggior numero possibile di risorse senza controllare lo stato della connessione. Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.

Pool di connessioni compatibile col driver

ODBC in Windows 8 consente ai driver di personalizzare il comportamento del pool di connessioni. Per maggiori informazioni, vedere Pool di connessioni compatibile con il driver.

Esecuzione asincrona (metodo di notifica)

ODBC 3.8 supporta il metodo di notifica per le operazioni asincrone, disponibile a partire da Windows 8. Per altre informazioni, vedere Esecuzione asincrona (metodo di notifica).

Vedi anche

Sviluppare un driver ODBC
Driver ODBC forniti da Microsoft
Novità di ODBC 3.8