Sdílet prostřednictvím


Přechody připojení

Připojení ODBC mají následující stavy.

Stát Popis
C0 Nepřidělené prostředí, nepřidělené připojení
C1 Přidělené prostředí, nepřidělené připojení
C2 Přidělené prostředí, přidělené připojení
C3 Funkce připojení potřebuje data.
C4 Připojené připojení
C5 Připojené připojení, přidělený příkaz
C6 Připojené připojení, probíhající transakce. Připojení může být ve stavu C6 bez příkazů přidělených pro připojení. Předpokládejme například, že připojení je v režimu ručního potvrzení a je ve stavu C4. Pokud je příkaz přidělen, proveden (spuštění transakce) a pak uvolněn, transakce zůstane aktivní, ale neexistují žádné příkazy v připojení.

Následující tabulky ukazují, jak každá funkce ODBC ovlivňuje stav připojení.

SQLAllocHandle

C0

Žádný env.
C1 Nepřidělené C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
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] Tento řádek zobrazuje přechody, když handleType SQL_HANDLE_ENV.

[2] Tento řádek zobrazuje přechody, když byl handletype SQL_HANDLE_DBC.

[3] Tento řádek zobrazuje přechody, když handletype SQL_HANDLE_STMT.

[4] Tento řádek zobrazuje přechody, když byl SQL_HANDLE_DESC HandleType.

[5] Volání SQLAllocHandle s OutputHandlePtr odkazující na platný popisovač přepisuje tento popisovač bez ohledu na předchozí obsah tohoto popisovače a může způsobit problémy s ovladači ODBC. Není správné programování aplikace ODBC volat SQLAllocHandle dvakrát se stejnou aplikační proměnnou definovanou pro *OutputHandlePtr bez volání SQLFreeHandle uvolnit popisovač před jeho přidělením. Přepsání popisovačů ODBC takovým způsobem může vést k nekonzistentnímu chování nebo chybám v části ovladačů ODBC.

SQLBrowseConnect

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

SQLCloseCursor

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Připojení bylo v režimu ručního potvrzení.

[2] Připojení bylo v režimu automatického potvrzení.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges a SQLTable

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Připojení bylo v režimu automatického potvrzení nebo zdroj dat nezačal transakci.

[2] Připojení bylo v režimu ručního potvrzení a zdroj dat začal transakci.

SQLConnect

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField a SQLSetDescRec

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) (IH) (IH) (IH) --[1] -- --

[1] V tomto stavu jsou pouze popisovače, které jsou pro aplikaci k dispozici, explicitně přidělovány popisovače.

SQLDataSources a SQLDrivers

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

SQLEndTran

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH)[1] --[3] --[3] --[3] -- -- --[4] nebo ([5], [6] a [8]) C4[5] a [7] C5[5], [6] a [9]
(IH)[2] (IH) (08003) (08003) -- -- C5

[1] Tento řádek zobrazuje přechody, když handleType SQL_HANDLE_ENV.

[2] Tento řádek zobrazuje přechody, když byl handletype SQL_HANDLE_DBC.

[3] Vzhledem k tomu, že připojení není v připojeném stavu, není to ovlivněno transakcí.

[4] Potvrzení nebo vrácení zpět v připojení se nezdařilo. Funkce v tomto případě vrátí SQL_ERROR.

[5] Potvrzení nebo vrácení zpět bylo u připojení úspěšné. Funkce vrátí SQL_ERROR, pokud potvrzení nebo vrácení zpět selhalo v jiném připojení, nebo funkce vrátí SQL_SUCCESS, pokud potvrzení nebo vrácení zpět bylo úspěšné u všech připojení.

[6] Pro připojení bylo přiděleno alespoň jedno prohlášení.

[7] Pro připojení nebyly přiděleny žádné příkazy.

[8] Připojení mělo alespoň jeden příkaz, pro který byl otevřený kurzor, a zdroj dat zachovává kurzory při potvrzení nebo vrácení transakcí zpět, podle toho, zda CompletionType byl SQL_COMMIT nebo SQL_ROLLBACK). Další informace naleznete v SQL_CURSOR_COMMIT_BEHAVIOR a SQL_CURSOR_ROLLBACK_BEHAVIOR atributy v SQLGetInfo.

[9] Pokud připojení obsahovalo nějaké příkazy, pro které byly otevřené kurzory, kurzory nebyly zachovány při potvrzení transakce nebo vrácení zpět.

SQLExecDirect a SQLExecute

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Připojení bylo v režimu automatického potvrzení a příkaz spuštěn nebyl kurzorspecifikace (například příkaz SELECT); nebo připojení bylo v režimu ručního potvrzení a příkaz spuštěn nespustí transakci.

[2] Připojení bylo v režimu automatického potvrzení a spouštěný příkaz byl kurzoremspecifikace (například příkaz SELECT).

[3] Připojení bylo v režimu ručního potvrzení a zdroj dat začal transakci.

SQLFreeHandle

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(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] a [8] C5[6] a [8]
(IH)[4] (IH) (IH) (IH) -- -- --

[1] Tento řádek zobrazuje přechody, když handleType SQL_HANDLE_ENV.

[2] Tento řádek zobrazuje přechody, když byl handletype SQL_HANDLE_DBC.

[3] Tento řádek zobrazuje přechody, když handletype SQL_HANDLE_STMT.

[4] Tento řádek zobrazuje přechody, když byl SQL_HANDLE_DESC HandleType.

[5] Pro připojení byl přidělen pouze jeden příkaz.

[6] Pro připojení bylo přiděleno více příkazů.

[7] Připojení bylo v režimu ručního potvrzení.

[8] Připojení bylo v režimu automatického potvrzení.

SQLFreeStmt

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Tento řádek zobrazuje transakce, pokud je argument možnost SQL_CLOSE.

[2] Tento řádek zobrazuje transakce, pokud je argument možnost SQL_UNBIND nebo SQL_RESET_PARAMS.

[3] Připojení bylo v režimu automatického potvrzení a žádné kurzory nebyly otevřeny u žádných příkazů s výjimkou tohoto.

[4] Připojení bylo v režimu ručního potvrzení nebo bylo v režimu automatického potvrzení a kurzor byl otevřen alespoň na jednom jiném příkazu.

SQLGetConnectAttr

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Argument atributu byl SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE nebo SQL_ATTR_TRACEFILE nebo byla pro atribut připojení nastavena hodnota.

[2] Argument atributu nebyl SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE nebo SQL_ATTR_TRACEFILE a pro atribut připojení nebyla nastavena hodnota.

SQLGetDiagField a SQLGetDiagRec

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Tento řádek zobrazuje přechody, když handleType SQL_HANDLE_ENV.

[2] Tento řádek zobrazuje přechody, když byl handletype SQL_HANDLE_DBC.

[3] Tento řádek zobrazuje přechody, když handletype SQL_HANDLE_STMT.

[4] Tento řádek zobrazuje přechody, když byl SQL_HANDLE_DESC HandleType.

SQLGetEnvAttr

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
IH -- -- -- -- -- --

FUNKCE SQLGetFunctions

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
IH IH --[1] 08003[2] 08003 -- -- --

[1] Argument InfoType byl SQL_ODBC_VER.

[2] Argument InfoType nebyl SQL_ODBC_VER.

SQLMoreResults

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Připojení bylo v režimu automatického potvrzení a volání SQLMoreResults neicializovalo zpracování sady výsledků specifikace kurzoru.

[2] Připojení bylo v režimu automatického potvrzení a volání SQLMoreResults inicializovalo zpracování sady výsledků specifikace kurzoru.

[3] Připojení bylo v režimu ručního potvrzení.

SQLNativeSql

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) (IH) (08003) (08003) -- -- --

SqlPrepare

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

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

[1] Připojení bylo v režimu automatického potvrzení nebo zdroj dat nezačal transakci.

[2] Připojení bylo v režimu ručního potvrzení a zdroj dat začal transakci.

SQLSetConnectAttr

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] a [6] C5[8] 08002[4] HY011[5] nebo [7]

[1] Argument atributu nebyl SQL_ATTR_TRANSLATE_LIB ani SQL_ATTR_TRANSLATE_OPTION.

[2] Argument atributu byl SQL_ATTR_TRANSLATE_LIB nebo SQL_ATTR_TRANSLATE_OPTION.

[3] Argument atributu nebyl SQL_ATTR_ODBC_CURSORS ani SQL_ATTR_PACKET_SIZE.

[4] Argument atributu byl SQL_ATTR_ODBC_CURSORS.

[5] Argument atributu byl SQL_ATTR_PACKET_SIZE.

[6] Argument atributu nebyl SQL_ATTR_AUTOCOMMIT nebo byl argument atributu atributu SQL_ATTR_AUTOCOMMIT a nastavení tohoto atributu transakci nepovedlo potvrdit.

[7] Argument atributu byl SQL_ATTR_TXN_ISOLATION.

[8] Argument atributu byl SQL_ATTR_AUTOCOMMIT a nastavením tohoto atributu byla transakce potvrzena.

SQLSetEnvAttr

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) -- -- (HY010) -- -- --

Všechny ostatní funkce ODBC

C0

Žádný env.
C1

Neobsazený
C2

Přidělený
C3

Potřebujete data
C4

Připojený
C5

Výrok
C6

Transakce
(IH) (IH) (IH) (IH) (IH) -- --