Dela via


Anslutningsövergångar

ODBC-anslutningar har följande tillstånd.

Stat Beskrivning
C0 Oallokerad miljö, oallokerad anslutning
C1 Allokerad miljö, oallokerad anslutning
C2 Allokerad miljö, allokerad anslutning
C3 Anslutningsfunktionen behöver data
C4 Ansluten anslutning
C5 Ansluten anslutning, allokerad instruktion
C6 Ansluten anslutning, transaktionen pågår. Det är möjligt att en anslutning är i tillstånd C6 utan några allokerade instruktioner för anslutningen. Anta till exempel att anslutningen är i manuellt incheckningsläge och är i tillståndet C4. Om en instruktion allokeras, körs (startar en transaktion) och sedan frigörs, förblir transaktionen aktiv men det finns inga instruktioner för anslutningen.

Följande tabeller visar hur varje ODBC-funktion påverkar anslutningstillståndet.

SQLAllocHandle

C0

Ingen env.
C1 Ej allokerad C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
C1[1] --[5] --[5] --[5] --[5] --[5] --[5]
(IH)[2] C2 --[5] --[5] --[5] --[5] --[5]
(IH)[3] (IH) (08003) (08003) C5 --[5] --[5]
(IH)[4] (IH) (08003) (08003) --[5] --[5] --[5]

[1] Den här raden visar övergångar när HandleType SQL_HANDLE_ENV.

[2] Den här raden visar övergångar när HandleType SQL_HANDLE_DBC.

[3] Den här raden visar övergångar när HandleType SQL_HANDLE_STMT.

[4] Den här raden visar övergångar när HandleType SQL_HANDLE_DESC.

[5] Anropar SQLAllocHandle- med OutputHandlePtr som pekar på en giltig handtagsöverskrivning som hanterar utan hänsyn till det tidigare innehållet i handtaget och kan orsaka problem för ODBC-drivrutiner. Det är fel ODBC-programprogrammering att anropa SQLAllocHandle två gånger med samma programvariabel definierad för *OutputHandlePtr utan att anropa SQLFreeHandle för att frigöra handtaget innan det omplaceras. Att skriva över ODBC-handtag på ett sådant sätt kan leda till inkonsekvent beteende eller fel från ODBC-drivrutiner.

SQLBrowseConnect

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] Anslutningen var i manuellt incheckningsläge.

[2] Anslutningen var i automatiskt incheckningsläge.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges och SQLTables

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] Anslutningen var i automatiskt incheckningsläge, eller så startade inte datakällan någon transaktion.

[2] Anslutningen var i manuellt incheckningsläge och datakällan startade en transaktion.

SQLConnect

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField och SQLSetDescRec

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) --[1] -- --

[1] I det här tillståndet är de enda deskriptorerna som är tillgängliga för programmet uttryckligen allokerade deskriptorer.

SQLDataSources och SQLDrivers

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH)[1] --[3] --[3] --[3] -- -- --[4] eller ([5], [6], och [8]) C4[5] och [7] C5[5], [6], och [9]
(IH)[2] (IH) (08003) (08003) -- -- C5

[1] Den här raden visar övergångar när HandleType SQL_HANDLE_ENV.

[2] Den här raden visar övergångar när HandleType SQL_HANDLE_DBC.

[3] Eftersom anslutningen inte är i ett anslutet tillstånd påverkas den inte av transaktionen.

[4] Incheckningen eller återställningen misslyckades på anslutningen. Funktionen returnerar SQL_ERROR i det här fallet.

[5] Incheckningen eller återställningen lyckades på anslutningen. Funktionen returnerar SQL_ERROR om incheckningen eller återställningen misslyckades på en annan anslutning, eller om funktionen returnerar SQL_SUCCESS om incheckningen eller återställningen lyckades på alla anslutningar.

[6] Minst en instruktion allokerades för anslutningen.

[7] Det fanns inga allokerade instruktioner för anslutningen.

[8] Anslutningen hade minst en instruktion som det fanns en öppen markör för, och datakällan bevarar markörer när transaktioner checkas in eller återställs, beroende på vilket som gäller (beroende på om CompletionType SQL_COMMIT eller SQL_ROLLBACK). Mer information finns i attributen SQL_CURSOR_COMMIT_BEHAVIOR och SQL_CURSOR_ROLLBACK_BEHAVIOR i SQLGetInfo.

[9] Om anslutningen hade några instruktioner för vilka det fanns öppna markörer bevarades inte markören när transaktionen checkades in eller återställdes.

SQLExecDirect och SQLExecute

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] Anslutningen var i automatiskt incheckningsläge och instruktionen som kördes var inte en markörspecifikation (till exempel en SELECT-instruktion); eller så var anslutningen i manuellt incheckningsläge och instruktionen som kördes startade inte en transaktion.

[2] Anslutningen var i automatiskt incheckningsläge och instruktionen som kördes var en markörspecifikation (till exempel en SELECT-instruktion).

[3] Anslutningen var i manuellt incheckningsläge och datakällan startade en transaktion.

SQLFreeHandle

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH)[1] C0 (HY010) (HY010) (HY010) (HY010) (HY010)
(IH)[2] (IH) (C1) (HY010) (HY010) (HY010) (HY010)
(IH)[3] (IH) (IH) (IH) (IH) C4[5] --[6] --[7] C4[5] och [8] C5[6] och [8]
(IH)[4] (IH) (IH) (IH) -- -- --

[1] Den här raden visar övergångar när HandleType SQL_HANDLE_ENV.

[2] Den här raden visar övergångar när HandleType SQL_HANDLE_DBC.

[3] Den här raden visar övergångar när HandleType SQL_HANDLE_STMT.

[4] Den här raden visar övergångar när HandleType SQL_HANDLE_DESC.

[5] Det fanns bara en instruktion allokerad på anslutningen.

[6] Flera instruktioner allokerades för anslutningen.

[7] Anslutningen var i manuellt incheckningsläge.

[8] Anslutningen var i automatiskt incheckningsläge.

SQLFreeStmt

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH)[1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH)[2] (IH) (IH) (IH) (IH) -- --

[1] Den här raden visar transaktioner när argumentet Alternativ är SQL_CLOSE.

[2] Den här raden visar transaktioner när argumentet Alternativ är SQL_UNBIND eller SQL_RESET_PARAMS.

[3] Anslutningen var i automatiskt incheckningsläge och inga markörer var öppna på några instruktioner förutom den här.

[4] Anslutningen var i manuellt incheckningsläge, eller så var den i automatiskt incheckningsläge och en markör var öppen på minst en annan instruktion.

SQLGetConnectAttr

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
IH IH --[1] 08003[2] HY010 -- -- --

[1] Argumentet Attribute var SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE eller SQL_ATTR_TRACEFILE, eller ett värde hade angetts för anslutningsattributet.

[2] Argumentet Attribute var inte SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE eller SQL_ATTR_TRACEFILE, och ett värde hade inte angetts för anslutningsattributet.

SQLGetDiagField och SQLGetDiagRec

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH)[1] -- -- -- -- -- --
(IH)[2] (IH) -- -- -- -- --
(IH)[3] (IH) (IH) (IH) (IH) -- --
(IH)[4] (IH) (IH) (IH) -- -- --

[1] Den här raden visar övergångar när HandleType SQL_HANDLE_ENV.

[2] Den här raden visar övergångar när HandleType SQL_HANDLE_DBC.

[3] Den här raden visar övergångar när HandleType SQL_HANDLE_STMT.

[4] Den här raden visar övergångar när HandleType SQL_HANDLE_DESC.

SQLGetEnvAttr

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
IH -- -- -- -- -- --

SQLGetFunctions

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
IH IH --[1] 08003[2] 08003 -- -- --

[1] Argumentet InfoType var SQL_ODBC_VER.

[2] Argumentet InfoType var inte SQL_ODBC_VER.

SQLMoreResults

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] Anslutningen var i automatiskt incheckningsläge och anropet till SQLMoreResults har inte initierat bearbetningen av en resultatuppsättning av en markörspecifikation.

[2] Anslutningen var i automatiskt incheckningsläge och anropet till SQLMoreResults har initierat bearbetningen av en resultatuppsättning av en markörspecifikation.

[3] Anslutningen var i manuellt incheckningsläge.

SQLNativeSql

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] Anslutningen var i automatiskt incheckningsläge, eller så startade inte datakällan någon transaktion.

[2] Anslutningen var i manuellt incheckningsläge och datakällan startade en transaktion.

SQLSetConnectAttr

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] och [6] C5[8] 08002[4] HY011[5] eller [7]

[1] Argumentet Attribute var inte SQL_ATTR_TRANSLATE_LIB eller SQL_ATTR_TRANSLATE_OPTION.

[2] Argumentet Attribute var SQL_ATTR_TRANSLATE_LIB eller SQL_ATTR_TRANSLATE_OPTION.

[3] Argumentet Attribute var inte SQL_ATTR_ODBC_CURSORS eller SQL_ATTR_PACKET_SIZE.

[4] Argumentet Attribute var SQL_ATTR_ODBC_CURSORS.

[5] Argumentet Attribute var SQL_ATTR_PACKET_SIZE.

[6] Argumentet Attribute var inte SQL_ATTR_AUTOCOMMIT eller argumentet Attribute var SQL_ATTR_AUTOCOMMIT och det här attributet checkade inte in transaktionen.

[7] Argumentet Attribute var SQL_ATTR_TXN_ISOLATION.

[8] Argumentet Attribute var SQL_ATTR_AUTOCOMMIT och inställningen för det här attributet bekräftade transaktionen.

SQLSetEnvAttr

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) -- -- (HY010) -- -- --

Alla andra ODBC-funktioner

C0

Ingen env.
C1

Oallokerat
C2

Tilldelade
C3

Behöver data
C4

Ansluten
C5

Uttalande
C6

Transaktion
(IH) (IH) (IH) (IH) (IH) -- --