Udostępnij za pośrednictwem


Przejścia połączeń

Połączenia ODBC mają następujące stany.

Stan Opis
C0 Nieprzydzielone środowisko, nieprzydzielone połączenie
C1 Przydzielone środowisko, nieprzydzielone połączenie
C2 Przydzielone środowisko, przydzielone połączenie
C3 Funkcja połączenia wymaga danych
C4 Połączenie połączone
C5 Połączenie połączone, instrukcja przydzielona
C6 Połączenie połączone, transakcja w toku. Istnieje możliwość, aby połączenie było w stanie C6 bez instrukcji przydzielonych w połączeniu. Załóżmy na przykład, że połączenie jest w trybie zatwierdzania ręcznego i jest w stanie C4. Jeśli instrukcja jest przydzielana, wykonywana (uruchamianie transakcji), a następnie zwolniona, transakcja pozostaje aktywna, ale nie ma żadnych instrukcji w połączeniu.

W poniższych tabelach pokazano, jak każda funkcja ODBC wpływa na stan połączenia.

SQLAllocHandle

C0

Nie env.
C1 Nieprzydzielone C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
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] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_ENV.

[2] Ten wiersz pokazuje przejścia, gdy HandleType został SQL_HANDLE_DBC.

[3] Ten wiersz pokazuje przejścia, gdy był SQL_HANDLE_STMT.

[4] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_DESC.

[5] Wywoływanie SQLAllocHandle za pomocą OutputHandlePtr wskazującą prawidłową obsługę, która obsługuje bez względu na poprzednią zawartość tego uchwytu, i może powodować problemy ze sterownikami ODBC. Niepoprawne programowanie aplikacji ODBC w celu wywołania SQLAllocHandle dwa razy z tą samą zmienną aplikacji zdefiniowaną dla *OutputHandlePtr bez wywoływania SQLFreeHandle, aby zwolnić dojście przed jej przeniesieniem. Zastępowanie dojść ODBC w taki sposób może prowadzić do niespójnego zachowania lub błędów ze strony sterowników ODBC.

SQLBrowseConnect

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

SQLCloseCursor

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Połączenie było w trybie zatwierdzania ręcznego.

[2] Połączenie było w trybie automatycznego zatwierdzania.

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

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Połączenie było w trybie automatycznego zatwierdzania lub źródło danych nie rozpoczęło transakcji.

[2] Połączenie było w trybie zatwierdzania ręcznego, a źródło danych rozpoczęło transakcję.

SQLConnect

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField i SQLSetDescRec

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) (IH) (IH) (IH) --[1] -- --

[1] W tym stanie jedyne deskryptory dostępne dla aplikacji są jawnie przydzielane deskryptorom.

SQLDataSources i SQLDrivers

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

SQLEndTran

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH)[1] --[3] --[3] --[3] -- -- --[4] lub ([5], [6] i [8]) C4[5] i [7] C5[5], [6] i [9]
(IH)[2] (IH) (08003) (08003) -- -- C5

[1] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_ENV.

[2] Ten wiersz pokazuje przejścia, gdy HandleType został SQL_HANDLE_DBC.

[3] Ponieważ połączenie nie jest w stanie połączenia, nie ma to wpływu na transakcję.

[4] Zatwierdzenie lub wycofywanie nie powiodło się w połączeniu. Funkcja zwraca SQL_ERROR w tym przypadku.

[5] Zatwierdzenie lub wycofanie zakończyło się pomyślnie w połączeniu. Funkcja zwraca SQL_ERROR, jeśli zatwierdzenie lub wycofanie nie powiodło się w innym połączeniu, lub funkcja zwraca SQL_SUCCESS, jeśli zatwierdzenie lub wycofanie zakończyło się pomyślnie na wszystkich połączeniach.

[6] W połączeniu przydzielono co najmniej jedną instrukcję.

[7] W połączeniu nie przydzielono żadnych instrukcji.

[8] Połączenie miało co najmniej jedną instrukcję, dla której był otwarty kursor, a źródło danych zachowuje kursory, gdy transakcje są zatwierdzane lub cofane, w zależności od tego, czy CompletionType był SQL_COMMIT, czy SQL_ROLLBACK). Aby uzyskać więcej informacji, zobacz atrybuty SQL_CURSOR_COMMIT_BEHAVIOR i SQL_CURSOR_ROLLBACK_BEHAVIOR w SQLGetInfo.

[9] Jeśli połączenie miało jakiekolwiek instrukcje, dla których były otwarte kursory, kursory nie były zachowywane, gdy transakcja została zatwierdzona lub wycofana.

SQLExecDirect i SQLExecute

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Połączenie było w trybie automatycznego zatwierdzania, a instrukcja wykonana nie była kursoremspecyfikacji (na przykład instrukcja SELECT); lub połączenie było w trybie zatwierdzania ręcznego, a instrukcja wykonana nie rozpoczęła transakcji.

[2] Połączenie było w trybie automatycznego zatwierdzania, a instrukcja wykonana była kursoremspecyfikacji (na przykład instrukcja SELECT).

[3] Połączenie było w trybie zatwierdzania ręcznego, a źródło danych rozpoczęło transakcję.

SQLFreeHandle

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_ENV.

[2] Ten wiersz pokazuje przejścia, gdy HandleType został SQL_HANDLE_DBC.

[3] Ten wiersz pokazuje przejścia, gdy był SQL_HANDLE_STMT.

[4] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_DESC.

[5] W połączeniu przydzielono tylko jedną instrukcję.

[6] W połączeniu przydzielono wiele instrukcji.

[7] Połączenie było w trybie zatwierdzania ręcznego.

[8] Połączenie było w trybie automatycznego zatwierdzania.

SQLFreeStmt

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Ten wiersz pokazuje transakcje, gdy argument opcji jest SQL_CLOSE.

[2] Ten wiersz pokazuje transakcje, gdy argument opcji jest SQL_UNBIND lub SQL_RESET_PARAMS.

[3] Połączenie było w trybie automatycznego zatwierdzania i nie były otwarte kursory na żadnych instrukcjach z wyjątkiem tego.

[4] Połączenie było w trybie zatwierdzania ręcznego lub było w trybie automatycznego zatwierdzania, a kursor był otwarty w co najmniej jednej innej instrukcji.

SQLGetConnectAttr

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Argument atrybutu był SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE lub SQL_ATTR_TRACEFILE albo ustawiono wartość atrybutu połączenia.

[2] Argument atrybutu nie został SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE lub SQL_ATTR_TRACEFILE, a wartość nie została ustawiona dla atrybutu połączenia.

SQLGetDiagField i SQLGetDiagRec

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_ENV.

[2] Ten wiersz pokazuje przejścia, gdy HandleType został SQL_HANDLE_DBC.

[3] Ten wiersz pokazuje przejścia, gdy był SQL_HANDLE_STMT.

[4] Ten wiersz pokazuje przejścia, gdy SQL_HANDLE_DESC.

SQLGetEnvAttr

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
IH -- -- -- -- -- --

SqlGetFunctions

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
IH IH --[1] 08003[2] 08003 -- -- --

[1] Argument InfoType został SQL_ODBC_VER.

[2] Argument InfoType nie był SQL_ODBC_VER.

SQLMoreResults

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Połączenie było w trybie automatycznego zatwierdzania, a wywołanie SQLMoreResults nie zainicjowało przetwarzania zestawu wyników specyfikacji kursora.

[2] Połączenie było w trybie automatycznego zatwierdzania, a wywołanie SQLMoreResults zainicjowało przetwarzanie zestawu wyników specyfikacji kursora.

[3] Połączenie było w trybie zatwierdzania ręcznego.

SQLNativeSql

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

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

[1] Połączenie było w trybie automatycznego zatwierdzania lub źródło danych nie rozpoczęło transakcji.

[2] Połączenie było w trybie zatwierdzania ręcznego, a źródło danych rozpoczęło transakcję.

SQLSetConnectAttr

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] i [6] C5[8] 08002[4] HY011[5] lub [7]

[1] Argument atrybutu nie był SQL_ATTR_TRANSLATE_LIB ani SQL_ATTR_TRANSLATE_OPTION.

[2] Argument atrybutu był SQL_ATTR_TRANSLATE_LIB lub SQL_ATTR_TRANSLATE_OPTION.

[3] Argument atrybutu nie był SQL_ATTR_ODBC_CURSORS ani SQL_ATTR_PACKET_SIZE.

[4] Argument atrybutu został SQL_ATTR_ODBC_CURSORS.

[5] Argument atrybutu był SQL_ATTR_PACKET_SIZE.

[6] Argument atrybutu nie był SQL_ATTR_AUTOCOMMIT lub argument atrybutu był SQL_ATTR_AUTOCOMMIT i ustawienie tego atrybutu nie zatwierdzało transakcji.

[7] Argument atrybutu został SQL_ATTR_TXN_ISOLATION.

[8] Argument atrybutu został SQL_ATTR_AUTOCOMMIT i ustawienie tego atrybutu zadeklarowało transakcję.

SQLSetEnvAttr

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) -- -- (HY010) -- -- --

Wszystkie inne funkcje ODBC

C0

Nie env.
C1

Nieprzydzielone
C2

Przydzielone
C3

Potrzebuję danych
C4

Spójny
C5

Wypowiedź
C6

Transakcja
(IH) (IH) (IH) (IH) (IH) -- --