Appendice B: Tabelle della transizione di stato ODBC

Le tabelle in questa appendice illustrano in che modo le funzioni ODBC causano transizioni degli stati di ambiente, connessione, istruzione e descrittore. Lo stato dell'ambiente, della connessione, dell'istruzione o del descrittore determina in genere quando è possibile chiamare le funzioni che usano il tipo di handle corrispondente (ambiente, connessione, istruzione o descrittore). Gli stati di ambiente, connessione, istruzione e descrittore si sovrappongono approssimativamente come illustrato nelle illustrazioni seguenti. Ad esempio, la sovrapposizione esatta degli stati di connessione C5 e C6 e dell'istruzione da S12 a S12 è dipendente dall'origine dati, poiché le transazioni iniziano in momenti diversi in origini dati diverse e lo stato del descrittore D1i (descrittore allocato in modo implicito) dipende dallo stato dell'istruzione con cui è associato il descrittore, mentre lo stato D1e (descrittore allocato in modo esplicito) è indipendente dallo stato di qualsiasi istruzione. Per una descrizione di ogni stato, vedere Transizioni di ambiente, transizioni di connessione, transizioni di istruzioni e transizioni del descrittore, più avanti in questa appendice.

Gli stati di ambiente e connessione si sovrappongono come segue:

Environment and connection states overlap

Gli stati di connessione e istruzione si sovrappongono come segue:

Connection and statement states overlap

Gli stati di istruzione e descrittore si sovrappongono come segue:

Statement and descriptor states overlap

Gli stati di connessione e descrittore si sovrappongono come segue:

Connection and descriptor states overlap

Ogni voce di una tabella di transizione può essere uno dei valori seguenti:

  • -- -Lo stato è invariato dopo l'esecuzione della funzione.

  • E

    n , C_n_, S_n_ o D_n_ : lo stato dell'ambiente, della connessione, dell'istruzione o del descrittore passa allo stato specificato.

  • (IH) - È stato passato un handle non valido alla funzione. Se l'handle era un handle Null o era un handle valido del tipo errato, ad esempio un handle di connessione è stato passato quando era necessario un handle di istruzione, la funzione restituisce SQL_INVALID_HANDLE; in caso contrario, il comportamento non è definito e probabilmente irreversibile. Questo errore viene visualizzato solo quando è l'unico risultato possibile di chiamare la funzione nello stato specificato. Questo errore non modifica lo stato e viene sempre rilevato da Gestione driver, come indicato dalle parentesi.

  • NS - Stato successivo. La transizione dell'istruzione è uguale a se l'istruzione non avesse eseguito gli stati asincroni. Si supponga, ad esempio, che un'istruzione che crea un set di risultati entri in stato S11 dallo stato S1 perché SQLExecDirect ha restituito SQL_STILL_EXECUTING. La notazione NS nello stato S11 indica che le transizioni per l'istruzione sono uguali a quelle per un'istruzione nello stato S1 che crea un set di risultati. Se SQLExecDirect restituisce un errore, l'istruzione rimane nello stato S1; se ha esito positivo, l'istruzione passa allo stato S5; se richiede dati, l'istruzione passa allo stato S8 e, se è ancora in esecuzione, rimane nello stato S11.

  • XXXXX o (XXXXX): SQLSTATE correlato alla tabella di transizione; Le statistiche SQL rilevate da Gestione driver sono racchiuse tra parentesi. La funzione ha restituito SQL_ERROR e l'oggetto SQLSTATE specificato, ma lo stato non cambia. Ad esempio, se SQLExecute viene chiamato prima di SQLPrepare, restituisce SQLSTATE HY010 (errore di sequenza di funzione).

Nota

Le tabelle non mostrano errori non correlati alle tabelle di transizione che non modificano lo stato. Ad esempio, quando SQLAllocHandle viene chiamato nello stato dell'ambiente E1 e restituisce SQLSTATE HY001 (errore di allocazione della memoria), l'ambiente rimane nello stato E1; non viene visualizzato nella tabella di transizione dell'ambiente per SQLAllocHandle.

Se l'ambiente, la connessione, l'istruzione o il descrittore possono passare a più di uno stato, ogni possibile stato viene visualizzato e una o più note a piè di pagina illustrano le condizioni in cui viene eseguita ogni transizione. Le note a piè di pagina seguenti possono essere visualizzate in qualsiasi tabella.

Nota Significato
b Prima o dopo. Il cursore è stato posizionato prima dell'inizio del set di risultati o dopo la fine del set di risultati.
c Funzione corrente. La funzione corrente è stata eseguita in modo asincrono.
g Sono necessari dati. La funzione ha restituito SQL_NEED_DATA.
e Errore. La funzione ha restituito SQL_ERROR.
i Riga non valida. Il cursore è stato posizionato su una riga nel set di risultati e la riga è stata eliminata o si è verificato un errore in un'operazione sulla riga. Se la matrice di stato della riga esiste, il valore nella matrice di stato della riga per la riga è stato SQL_ROW_DELETED o SQL_ROW_ERROR. La matrice di stato della riga fa riferimento all'attributo dell'istruzione SQL_ATTR_ROW_STATUS_PTR.
nf Non trovato. La funzione ha restituito SQL_NO_DATA. Questo non si applica quando SQLExecDirect, SQLExecute o SQLParamData restituisce SQL_NO_DATA dopo l'esecuzione di un'istruzione di aggiornamento o eliminazione ricercata.
np Non preparato. L'istruzione non è stata preparata.
nr Nessun risultato. L'istruzione non creerà o non creerà un set di risultati.
o Altra funzione. Un'altra funzione è stata eseguita in modo asincrono.
p Preparato. L'istruzione è stata preparata.
r Risultati. L'istruzione creerà o creerà un set di risultati (possibilmente vuoto).
s Esito positivo. La funzione ha restituito SQL_SUCCESS_WITH_INFO o SQL_SUCCESS.
v Riga valida. Il cursore è stato posizionato su una riga nel set di risultati e la riga è stata inserita correttamente, aggiornata correttamente o un'altra operazione sulla riga è stata completata correttamente. Se la matrice di stato della riga esiste, il valore nella matrice di stato della riga per la riga è stato SQL_ROW_ADDED, SQL_ROW_SUCCESS o SQL_ROW_UPDATED. La matrice di stato della riga fa riferimento all'attributo dell'istruzione SQL_ATTR_ROW_STATUS_PTR.
x In esecuzione. La funzione ha restituito SQL_STILL_EXECUTING.

SQLFreeHandle

In questo esempio la riga nella tabella di transizione dello stato dell'ambiente per SQLFreeHandle quando HandleType è SQL_HANDLE_ENV è la seguente.

E0

Non allocato
E1

Allocato
E2

Connessione
(IH) E0 (HY010)

Se SQLFreeHandle viene chiamato nello stato dell'ambiente E0 con HandleType impostato su SQL_HANDLE_ENV, Gestione driver restituisce SQL_INVALID_HANDLE. Se viene chiamato nello stato E1 con HandleType impostato su SQL_HANDLE_ENV, l'ambiente passa allo stato E0 se la funzione riesce e rimane nello stato E1 se la funzione ha esito negativo. Se viene chiamato nello stato E2 con HandleType impostato su SQL_HANDLE_ENV, Gestione driver restituisce sempre SQL_ERROR e SQLSTATE HY010 (errore di sequenza di funzione) e l'ambiente rimane nello stato E2.

Per comprendere le tabelle di transizione dello stato, è necessario comprendere a quale elemento (ambiente, connessione, istruzione o descrittore) fanno riferimento. Si supponga che una funzione accetti l'handle di un elemento di tipo X. La tabella di transizione dello stato X per tale funzione descrive come chiamare la funzione, con l'handle di un elemento di tipo X, influisce su tale elemento. Ad esempio, SQLDisconnect accetta un handle di connessione. La tabella di transizione dello stato della connessione per SQLDisconnect descrive in che modo SQLDisconnect influisce sullo stato della connessione per cui viene chiamata.

Si supponga che una funzione accetti l'handle di un elemento di tipo Y, dove Y non è uguale a X. La tabella di transizione dello stato X per tale funzione descrive come chiamare la funzione, con un handle di tipo X associato all'elemento di tipo Y, influisce sull'elemento di tipo Y. Ad esempio, la tabella di transizione dello stato dell'istruzione per SQLDisconnect descrive in che modo SQLDisconnect influisce sullo stato di un'istruzione quando viene chiamato con l'handle della connessione a cui è associata l'istruzione .

Questa appendice contiene gli argomenti seguenti.