SQLSetConnectAttr, funkcja

Zgodność
Wprowadzona wersja: Zgodność z normami ODBC 3.0: ISO 92

Podsumowanie
SQLSetConnectAttr ustawia atrybuty regulujące aspekty połączeń.

Note

Aby uzyskać więcej informacji o tym, do czego Driver Manager mapuje tę funkcję, gdy aplikacja ODBC 3*.x* pracuje z sterownikiem ODBC 2*.x*, zobacz Mapping Replacement Functions for Backward Compatibility of Applications.

Syntax

  
SQLRETURN SQLSetConnectAttr(  
     SQLHDBC       ConnectionHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

Arguments

ConnectionHandle
[Dane wejściowe] Uchwyt połączenia.

Atrybut
[Input] Przypisz do zestawu, wpisany w "Komentarze."

Valueptr
[Input] Wskaźnik do wartości powiązanej z atrybutem. W zależności od wartości atrybutu, ValuePtr będzie wartością całkowitą bez znaku lub wskaże na ciąg znaków zakończony zerowo. Należy zauważyć, że całkowity typ argumentu Attribute może nie mieć stałej długości, szczegóły w sekcji Komentarze.

StringLength
[Input] Jeśli Attribute jest atrybutem zdefiniowanym przez ODBC, a ValuePtr wskazuje na ciąg znaków lub bufor binarny, ten argument powinien mieć długość *ValuePtr. Dla danych ciągu znaków argument ten powinien zawierać liczbę bajtów w ciągu znaków.

Jeśli Attribute jest atrybutem zdefiniowanym przez ODBC, a ValuePtr jest liczbą całkowitą, StringLength jest ignorowany.

Jeśli Attribute jest atrybutem definiowanym przez sterownik, aplikacja wskazuje charakter atrybutu Driver Managerowi, ustawiając argument StringLength . StringLength może mieć następujące wartości:

  • Jeśli ValuePtr jest wskaźnikiem do ciągu znaków, to StringLength to długość ciągu lub SQL_NTS.

  • Jeśli ValuePtr jest wskaźnikiem do bufora binarnego, aplikacja umieszcza wynik makra SQL_LEN_BINARY_ATTR(length) w StringLength. To umieszcza ujemną wartość w StringLength.

  • Jeśli ValuePtr jest wskaźnikiem do wartości innej niż ciąg znaków lub ciąg binarny, to StringLength powinien mieć wartość SQL_IS_POINTER.

  • Jeśli ValuePtr zawiera wartość o stałej długości, to StringLength jest albo SQL_IS_INTEGER, albo SQL_IS_UINTEGER, zgodnie z przeznaczeniem.

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE lub SQL_STILL_EXECUTING.

Diagnostyka

Gdy SQLSetConnectAttr zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_DBC oraz HandleHandle. Poniższa tabela przedstawia wartości SQLSTATE najczęściej zwracane przez SQLSetConnectAttr i wyjaśnia każdą z nich w kontekście tej funkcji; notacja "(DM)" poprzedza opisy stanów SQL zwracanych przez Menedżera Sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

Kierowca może zwrócić SQL_SUCCESS_WITH_INFO, aby podać informacje o wyniku ustawienia opcji.

SQLSTATE Error Description
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
01S02 Zmieniono wartość opcji Sterownik nie wspierał wartości podanej w ValuePtr i zastępował ją podobną. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
08002 Używana nazwa połączenia Argument Attribute był SQL_ATTR_ODBC_CURSORS, a sterownik był już połączony ze źródłem danych.
08003 Połączenie nie jest otwarte (DM) Określono wartość atrybutu wymagającą otwartego połączenia, ale uchwyt połączenia nie był w stanie połączenia.
08S01 Błąd połączenia komunikacyjnego Połączenie komunikacyjne między sterownikiem a źródłem danych, z którym sterownik został połączony, nie powiodło się przed zakończeniem przetwarzania funkcji.
24000 Nieprawidłowy stan kursora Argument Atrybut był SQL_ATTR_CURRENT_CATALOG, a zestaw wyników był w trakcie oczekiwania.
25000 Nielegalna działalność podczas transakcji lokalnej Połączenie było w lokalnej transakcji podczas próby rejestracji w rozproszone połączenie transakcji (DTC) poprzez ustawienie atrybutu połączenia SQL_ATTR_ENLIST_IN_DTC.

Połączenie jest już zarejestrowane w DTC.

Połączenie zostało zarejestrowane w rozproszonym połączeniu transakcyjnym, a lokalna transakcja została rozpoczęta przez ustawienie SQL_ATTR_AUTOCOMMIT na SQL_AUTOCOMMIT_OFF.
3D000 Nieprawidłowa nazwa wykazu Argument Attribute był SQL_CURRENT_CATALOG, a podana nazwa katalogu była nieprawidłowa.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego stanu SQLSTATE i dla którego nie zdefiniowano parametru SQLSTATE specyficznego dla implementacji. Komunikat o błędzie zwrócony przez element SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY008 Operacja anulowana Przetwarzanie asynchroniczne zostało włączone dla ConnectionHandle. Funkcja SQLSetConnectAttr została wywołana, a przed jej zakończeniem wykonania funkcja SQLCancelHandle została wywołana na ConnectionHandle, a następnie funkcja SQLSetConnectAttr została ponownie wywołana na ConnectionHandle.

Albo wywoływano funkcję SQLSetConnectAttr , a przed jej zakończeniem wykonania SQLCancelHandle był wywoływany na ConnectionHandle z innego wątku w aplikacji wielowątkowej.
HY009 Nieprawidłowe użycie wskaźnika o wartości null Argument Attribute identyfikował atrybut połączenia wymagający wartości ciągu znaków, a argument ValuePtr był wskaźnikiem zerowym.
HY010 Błąd sekwencji funkcji (DM) Funkcja wykonująca się asynchronicznie została wywołana dla CommandHandle powiązanego z ConnectionHandle i nadal działała, gdy wywoływano SQLSetConnectAttr .

(DM) Funkcja wykonująca asynchronicznie (nie ta) była wywoływana dla ConnectionHandle i nadal działała w momencie wywołania tej funkcji.

(DM) SQLExecute, SQLExecDirect lub SQLMoreResults zostały wywołane dla jednego z uchwytów instrukcji powiązanych z ConnectionHandle i zwracały SQL_PARAM_DATA_AVAILABLE. Ta funkcja została wywołana przed pobraniem danych dla wszystkich parametrów przesyłanych strumieniowo.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos zostały wywołane do wykonania CommandHandle powiązanego z ConnectionHandle i zwróciły SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.

(DM) SQLBrowseConnect został wywołany dla ConnectionHandle i zwrócił SQL_NEED_DATA. Funkcja ta była wywoływana przed zwróceniem przez SQLBrowseConnect SQL_SUCCESS_WITH_INFO lub SQL_SUCCESS.
HY011 Atrybut nie może być teraz ustawiony Argument Atrybut był SQL_ATTR_TXN_ISOLATION i transakcja została otwarta.
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY024 Nieprawidłowa wartość atrybutu Dla określonej wartości atrybutu w ValuePtr określono nieprawidłową wartość. (Driver Manager zwraca ten stan SQLu tylko dla atrybutów połączenia i instrukcji, które akceptują dyskretny zestaw wartości, takich jak SQL_ATTR_ACCESS_MODE lub SQL_ATTR_ASYNC_ENABLE. Dla wszystkich pozostałych atrybutów połączeń i instrukcji sterownik musi zweryfikować wartość określoną w ValuePtr.)

Argument Attribute to SQL_ATTR_TRACEFILE lub SQL_ATTR_TRANSLATE_LIB, a ValuePtr był ciągiem pustym.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) *ValuePtr to ciąg znaków, a argument StringLength był mniejszy niż 0, ale nie był SQL_NTS.
HY092 Nieprawidłowy identyfikator atrybutu/opcji (DM) Wartość podana dla atrybutu argumentu nie była ważna dla wersji ODBC obsługiwanej przez sterownik.

(DM) Wartość określona dla atrybutu argumentu była atrybutem tylko do odczytu.
HY114 Sterownik nie obsługuje asynchronicznego wykonywania funkcji na poziomie połączenia (DM) Aplikacja próbowała włączyć asynchroniczne wykonywanie funkcji z SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE dla sterownika, który nie obsługuje operacji połączenia asynchronicznego.
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Więcej informacji o stanie zawieszenia można znaleźć w sekcji SQLEndTran Function.
HY121 Biblioteka kursorów i Driver-Aware Pooling nie mogą być włączone jednocześnie Aby uzyskać więcej informacji, zobacz Driver-Aware Zarządzanie Pulą Połączeń.
HYC00 Opcjonalna funkcja nie zaimplementowana Wartość określona dla atrybutu argumentu była prawidłowym atrybutem połączenia lub instrukcji ODBC dla wersji ODBC obsługiwanej przez sterownik, ale nie obsługiwanej przez sam sterownik.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą parametru SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik powiązany z ConnectionHandle nie obsługuje tej funkcji.
IM009 Nie można załadować tłumaczenia DLL Sterownik nie był w stanie załadować tłumaczącego DLL określonego dla połączenia. Ten błąd może być zwrócony tylko wtedy, gdy Atrybut jest SQL_ATTR_TRANSLATE_LIB.
IM017 Sondowanie jest wyłączone w trybie powiadomień asynchronicznych Za każdym razem, gdy jest używany model powiadomień, sondowanie jest wyłączone.
IM018 Funkcja SQLCompleteAsync nie została wywołana w celu ukończenia poprzedniej operacji asynchronicznej na tym dojściu. Jeśli poprzednie wywołanie funkcji na dojściu zwraca SQL_STILL_EXECUTING i jeśli tryb powiadomień jest włączony, narzędzie SQLCompleteAsync musi być wywoływane na dojściu, aby wykonać przetwarzanie końcowe i zakończyć operację.
S1118 Sterownik nie obsługuje asynchronicznych powiadomień SQL_ATTR_ASYNC_DBC_EVENT zostało ustawione (po nawiązaniu połączenia), ale asynchroniczne powiadomienia nie są obsługiwane przez sterownik.

Gdy Attribute jest atrybutem instrukcji, SQLSetConnectAttr może zwracać dowolne stany SQL-state zwrócone przez SQLSetStmtAttr.

Comments

Ogólne informacje o atrybutach połączenia można znaleźć w sekcji Atrybuty połączenia.

Obecnie zdefiniowane atrybuty oraz wersja ODBC, w której zostały wprowadzone, przedstawiono w tabeli później w tej sekcji; Oczekuje się, że zostanie zdefiniowanych więcej atrybutów, aby wykorzystać różne źródła danych. ODBC zarezerwuje zakres atrybutów; Twórcy sterowników muszą zarezerwować wartości do własnego, specyficznego dla sterowników od Open Group.

Note

Możliwość ustawiania atrybutów instrukcji na poziomie połączenia poprzez wywołanie SQLSetConnectAttr została wycofana w ODBC 3*.x*. Aplikacje ODBC 3*.x* nigdy nie powinny ustawiać atrybutów instrukcji na poziomie połączenia. Atrybuty instrukcji ODBC 3*.x* nie mogą być ustawiane na poziomie połączenia, z wyjątkiem atrybutów SQL_ATTR_METADATA_ID i SQL_ATTR_ASYNC_ENABLE, które są zarówno atrybutami połączenia, jak i atrybutami instrukcji, i mogą być ustawiane zarówno na poziomie połączenia, jak i instrukcji.

Sterowniki ODBC 3*.x* muszą obsługiwać tę funkcjonalność tylko wtedy, gdy mają działać z aplikacjami ODBC 2*.x*, które ustawiają opcje instrukcji ODBC 2*.x* na poziomie połączenia. Aby uzyskać więcej informacji, zobacz Mapowanie SQLSetConnectOption w Dodatku G: Wytyczne dla sterowników dotyczących zgodności wstecznej.

Aplikacja może wywołać SQLSetConnectAttr w dowolnym momencie między alokacją a zwolnieniem połączenia. Wszystkie atrybuty połączenia i instrukcji ustaliwe przez aplikację dla połączenia pozostają do momentu wywołania SQLFreeHandle na połączeniu. Na przykład, jeśli aplikacja wywoła SQLSetConnectAttr przed połączeniem ze źródłem danych, atrybut pozostaje nawet jeśli SQLSetConnectAttr zawiodła w sterowniku podczas łączenia się aplikacji ze źródłem danych; Jeśli aplikacja ustawi atrybut specyficzny dla sterownika, atrybut ten pozostaje nawet jeśli aplikacja łączy się z innym sterownikiem na połączeniu.

Niektóre atrybuty połączenia można ustawić tylko przed nawiązaniem połączenia; inne można ustawić dopiero po nawiązaniu połączenia. Poniższa tabela wskazuje atrybuty połączenia, które muszą zostać określone przed, lub po nawiązaniu połączenia. Oba oznaczają , że atrybut można ustawić przed lub po połączeniu.

Attribute Ustawione przed czy po połączeniu?
SQL_ATTR_ACCESS_MODE Albo[1]
SQL_ATTR_ASYNC_DBC_EVENT Jeden z dwóch
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE Albo[4]
SQL_ATTR_ASYNC_DBC_PCALLBACK Jeden z dwóch
SQL_ATTR_ASYNC_DBC_PCONTEXT Jeden z dwóch
SQL_ATTR_ASYNC_ENABLE Albo[2]
SQL_ATTR_AUTO_IPD Jeden z dwóch
SQL_ATTR_AUTOCOMMIT Albo[5]
SQL_ATTR_CONNECTION_DEAD po
SQL_ATTR_CONNECTION_TIMEOUT Jeden z dwóch
SQL_ATTR_CURRENT_CATALOG Albo[1]
SQL_ATTR_DBC_INFO_TOKEN po
SQL_ATTR_ENLIST_IN_DTC po
SQL_ATTR_LOGIN_TIMEOUT przed
SQL_ATTR_METADATA_ID Jeden z dwóch
SQL_ATTR_ODBC_CURSORS przed
SQL_ATTR_PACKET_SIZE przed
SQL_ATTR_QUIET_MODE Jeden z dwóch
SQL_ATTR_TRACE Jeden z dwóch
SQL_ATTR_TRACEFILE Jeden z dwóch
SQL_ATTR_TRANSLATE_LIB po
SQL_ATTR_TRANSLATE_OPTION po
SQL_ATTR_TXN_ISOLATION Albo[3]

[1] SQL_ATTR_ACCESS_MODE i SQL_ATTR_CURRENT_CATALOG można ustawić przed lub po podłączeniu, w zależności od sterownika. Jednak międzyoperacyjne aplikacje ustawiają je przed nawiązaniem połączenia, ponieważ niektóre sterowniki nie obsługują ich zmiany po nawiązaniu połączenia.

[2] SQL_ATTR_ASYNC_ENABLE musi być ustalone, zanim pojawi się aktywne oświadczenie.

[3] SQL_ATTR_TXN_ISOLATION można ustawić tylko wtedy, gdy na połączeniu nie ma otwartych transakcji. Niektóre atrybuty połączenia wspierają podstawienie podobnej wartości, jeśli źródło danych nie obsługuje wartości podanej w *ValuePtr. W takich przypadkach sterownik zwraca SQL_SUCCESS_WITH_INFO oraz SQLSTATE 01S02 (wartość opcji zmieniona). Na przykład, jeśli Attribute jest SQL_ATTR_PACKET_SIZE, a *ValuePtr przekracza maksymalny rozmiar pakietu, sterownik zastępuje go maksymalnym rozmiarem. Aby określić podstawioną wartość, aplikacja wywołuje SQLGetConnectAttr.

[4] Jeśli SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE zostanie ustawiony przed otwarciem połączenia, Menedżer sterowników ustawi atrybut sterownika podczas ładowania sterownika podczas wywołania do SQLBrowseConnect, SQLConnct lub SQLDriverConnect. Przed wywołaniem do SQLBrowseConnect, SQLConnct lub SQLDriverConnect Driver Manager nie wie, do którego sterownika się połączyć i czy obsługuje operacje połączenia asynchronycznego. Dlatego Driver Manager zawsze zwraca SQL_SUCCESS. Jednak jeśli sterownik nie obsługuje operacji połączenia asynchronicznego, wywołanie do SQLBrowseConnect, SQLConnct lub SQLDriverConnect nie zawie się.

[5] Gdy SQL_ATTR_AUTOCOMMIT jest ustawione na FALSE, aplikacje powinny wywołać SQLEndTran(SQL_ROLLBACK), jeśli jakiekolwiek API zwraca SQL_ERROR, aby zapewnić spójność transakcyjną.

Format zbioru informacji w buforze *ValuePtr zależy od określonego atrybutu. SQLSetConnectAttr akceptuje informacje atrybutów w jednym z dwóch formatów: ciągu znaków zakończonych zerowo lub wartościach całkowitoliczbowych. Format każdego z nich jest wskazany w opisie atrybutu. Ciągi znaków wskazane przez argument ValuePtr w SQLSetConnectAttr mają długość bajtów StringLength .

Argument StringLength jest ignorowany, jeśli długość jest zdefiniowana przez atrybut, tak jak ma to miejsce w przypadku wszystkich atrybutów wprowadzonych w ODBC 2*.x* lub wcześniejszych.

Atrybut Wartość Zawartości
SQL_ATTR_ACCESS_MODE (ODBC 1.0) Wartość SQLUINTEGER. SQL_MODE_READ_ONLY jest używany przez sterownik lub źródło danych jako wskaźnik, że połączenie nie jest wymagane do obsługi instrukcji SQL powodujących aktualizacje. Ten tryb może być używany do optymalizacji strategii blokowania, zarządzania transakcjami lub innych obszarów odpowiednich dla sterownika lub źródła danych. Kierowca nie jest zobowiązany do uniemożliwiania przesyłania takich oświadczeń do źródła danych. Zachowanie sterownika i źródła danych podczas przetwarzania instrukcji SQL nie-tylko do odczytu podczas połączenia tylko do odczytu jest definiowane przez implementację. SQL_MODE_READ_WRITE jest domyślne.
SQL_ATTR_ASYNC_DBC_EVENT (ODBC 3.8) Wartość SQLPOINTER, która jest uchwytem zdarzenia.

Powiadomienie o zakończeniu funkcji asynchronicznych jest możliwe poprzez wywołanie SQLSetConnectAttr z atrybutem SQL_ATTR_ASYNC_STMT_EVENT i określenie uchwytu zdarzenia. Uwaga: Metoda powiadomień nie jest wspierana w bibliotece kursorów. Jeśli aplikacja podejmie próbę włączenia biblioteki kursorów za pośrednictwem metody SQLSetConnectAttr, zostanie wyświetlony komunikat o błędzie.
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE (ODBC 3.8) Wartość SQLUINTEGER, która umożliwia lub wyłącza asynchroniczne wykonywanie wybranych funkcji na uchwycie połączenia. Aby uzyskać więcej informacji, zobacz Asynchroniczne wykonywanie (metoda sondowania).

SQL_ASYNC_DBC_ENABLE_ON = Włącz pracę asynchroniczną dla określonych funkcji związanych z połączeniem.

SQL_ASYNC_DBC_ENABLE_OFF = (Domyślnie) Wyłącz działanie asynchroniczne dla określonych funkcji związanych z połączeniem.

Ustawienie SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE jest zawsze synchroniczne (to znaczy, nigdy nie wróci SQL_STILL_EXECUTING).

Asynchroniczne wykonywanie operacji instrukcji jest możliwe dzięki SQL_ATTR_ASYNC_ENABLE.
SQL_ATTR_ASYNC_DBC_PCALLBACK (ODBC 3.8) Wartość SQLPOINTER wskazująca na strukturę kontekstu.

Tylko Driver Manager może wywołać funkcję SQLSetStmtAttr sterownika za pomocą tego atrybutu.
SQL_ATTR_ASYNC_DBC_PCONTEXT (ODBC 3.8) Wartość SQLPOINTER, która wskazuje na strukturę kontekstową.

Tylko Driver Manager może wywołać funkcję SQLSetStmtAttr sterownika za pomocą tego atrybutu.
SQL_ATTR_ASYNC_ENABLE (ODBC 3.0) Wartość SQLULEN określająca, czy funkcja wywołana za pomocą instrukcji na określonym połączeniu jest wykonywana asynchronicznie:

SQL_ASYNC_ENABLE_OFF = Wyłącz asynchroniczne wsparcie wykonania na poziomie połączenia dla operacji instrukcji (domyślnie).

SQL_ASYNC_ENABLE_ON = Włącz asynchroniczne wsparcie wykonawcze na poziomie połączenia dla operacji instrukcji.

Ten atrybut można ustawić, niezależnie od tego, czy SQLGetInfo z typem informacji SQL_ASYNC_MODE zwraca SQL_AM_CONNECTION czy SQL_AM_STATEMENT.
SQL_ATTR_AUTO_IPD (ODBC 3.0) Wartość SQLUINTEGER dostępna tylko do odczytu, która określa, czy obsługiwane jest automatyczne zaludnienie IPD po wywołaniu do SQLPrepare :

SQL_TRUE = Automatyczne zaludnienie IPD po wywołaniu do SQLPrepare jest obsługiwane przez sterownik.

SQL_FALSE = Automatyczne zaludnienie IPD po wywołaniu do SQLPrepare nie jest obsługiwane przez sterownik. Serwery, które nie obsługują przygotowanych wypowiedzi, nie będą mogły automatycznie wypełnić IPD.

Jeśli SQL_TRUE zostanie zwrócone dla atrybutu SQL_ATTR_AUTO_IPD połączenia, atrybut SQL_ATTR_ENABLE_AUTO_IPD instrukcji można ustawić tak, aby automatycznie włączał lub wyłączał populację IPD. Jeśli SQL_ATTR_AUTO_IPD jest SQL_FALSE, nie można SQL_ATTR_ENABLE_AUTO_IPD ustawić na SQL_TRUE. Domyślna wartość SQL_ATTR_ENABLE_AUTO_IPD jest równa wartości SQL_ATTR_AUTO_IPD.

Ten atrybut połączenia może być zwrócony przez SQLGetConnectAttr , ale nie może być ustawiony przez SQLSetConnectAttr.
SQL_ATTR_AUTOCOMMIT (ODBC 1.0) Wartość SQLUINTEGER, która określa, czy używać trybu automatycznego zatwierdzania czy ręcznego zatwierdzania:

SQL_AUTOCOMMIT_OFF = Sterownik korzysta z trybu ręcznego zatwierdzania, a aplikacja musi jawnie zatwierdzać lub cofać transakcje z SQLEndTran.

SQL_AUTOCOMMIT_ON = Sterownik korzysta z trybu automatycznego zatwierdzania. Każde zdanie jest zatwierdzane natychmiast po wykonaniu. Jest to opcja domyślna. Wszystkie otwarte transakcje na połączeniu są zatwierdzane, gdy SQL_ATTR_AUTOCOMMIT jest ustawione na SQL_AUTOCOMMIT_ON przełączania z trybu ręcznego zatwierdzania na tryb automatycznego zatwierdzania.

Więcej informacji można znaleźć w Trybie Commit. Ważne: Niektóre źródła danych usuwają plany dostępu i zamykają kursory dla wszystkich instrukcji na połączeniu za każdym razem, gdy zatwierdzane jest zdanie; Tryb automatycznego zatwierdzania może powodować takie wystąpienie po wykonaniu każdego polecenia non query lub po zamknięciu kursora dla zapytania. Więcej informacji można znaleźć w typach SQL_CURSOR_COMMIT_BEHAVIOR i SQL_CURSOR_ROLLBACK_BEHAVIOR informacji w SQLGetInfo oraz w Effect of Transactions on Cursors and Prepared Statements.

Gdy partia jest wykonywana w trybie automatycznego zatwierdzania, możliwe są dwie rzeczy. Cała partia może być traktowana jako jednostka autocommitowalna lub każde zdanie w partii traktowane jako jednostka autocommitable. Niektóre źródła danych mogą wspierać oba te zachowania i mogą umożliwić wybór jednego lub drugiego. Jest definiowane przez sterownik, czy partia jest traktowana jako jednostka autocommitowalna, czy też każde pojedyncze zdanie w partii jest autocommitable.
SQL_ATTR_CONNECTION_DEAD

(ODBC 3.5)
Wartość SQLUINTEGER tylko do odczytu, która wskazuje stan połączenia. Jeśli SQL_CD_TRUE, połączenie zostało utracone. Jeśli SQL_CD_FALSE, połączenie nadal jest aktywne.
SQL_ATTR_CONNECTION_TIMEOUT (ODBC 3.0) Wartość SQLUINTEGER odpowiadająca liczbie sekund oczekiwania na zakończenie jakiegokolwiek żądania połączenia przed powrotem do aplikacji. Sterownik powinien zwracać SQLSTATE HYT00 (Timeout expired) za każdym razem, gdy możliwe jest wygaśnięcie czasu w sytuacji niezwiązanej z wykonywaniem zapytań lub logowaniem.

Jeśli wartość Ptr jest równa 0 (domyślnie), nie ma przerwy czasowej.
SQL_ATTR_CURRENT_CATALOG (ODBC 2.0) Ciąg znaków zawierający nazwę katalogu używanego przez źródło danych. Na przykład w SQL Server katalog jest bazą danych, więc sterownik wysyła do źródła danych polecenie USEdatabase, gdzie baza danych to baza danych określona w *ValuePtr. Dla sterownika jednopoziomowego katalog może być katalogiem, więc sterownik zmienia aktualny katalog na katalog określony w *ValuePtr.
SQL_ATTR_DBC_INFO_TOKEN (ODBC 3.8 Wartość SQLPOINTER używana do cofnięcia tokena informacji o połączeniu do uchwytu DBC, gdy parametr SQLRateConnection (*Rating) nie jest równy 100.

SQL_ATTR_DBC_INFO_TOKEN jest tylko dla zestawu. Nie jest możliwe użycie SQLGetConnectAttr ani SQLGetConnectOption do pobrania tej wartości. SQLSetConnectAttr w Driver Managerze nie zaakceptuje SQL_ATTR_DBC_INFO_TOKEN, ponieważ aplikacja nie powinna ustawiać tego atrybutu.

Jeśli sterownik zwróci SQL_ERROR po ustawieniu SQL_ATTR_DBC_INFO_TOKEN, połączenie właśnie uzyskane z puli zostanie zwolnione. Driver Manager spróbuje wtedy uzyskać kolejne połączenie z puli. Więcej informacji można znaleźć w artykule Rozwijanie świadomości Connection-Pool w kierowcy ODBC .
SQL_ATTR_ENLIST_IN_DTC (ODBC 3.0) Wartość SQLPOINTER, która określa, czy należy używać sterownika ODBC w rozproszonych transakcjach koordynowanych przez Microsoft Component Services.

Przekażę obiekt transakcyjny DTC OLE, który określa transakcję do eksportu do SQL Server, lub SQL_DTC_DONE zakończyć powiązanie DTC połączenia.

Klient wywołuje metodę Microsoft Distributed Transaction Coordinator (MS DTC) OLE ITransactionDispenser::BeginTransaction, aby rozpocząć transakcję MS DTC i utworzyć obiekt transakcyjny MS DTC reprezentujący transakcję. Następnie aplikacja wywołuje SQLSetConnectAttr z opcją SQL_ATTR_ENLIST_IN_DTC powiązania obiektu transakcji z połączeniem ODBC. Cała powiązana działalność bazowa będzie wykonywana pod ochroną transakcji MS DTC. Aplikacja wywołuje SQLSetConnectAttr z SQL_DTC_DONE, aby zakończyć powiązanie DTC połączenia. Aby uzyskać więcej informacji, zobacz dokumentację usługi MS DTC.
SQL_ATTR_LOGIN_TIMEOUT (ODBC 1.0) Wartość SQLUINTEGER odpowiadająca liczbie sekund oczekiwania na zakończenie żądania logowania przed powrotem do aplikacji. Domyślnie zależy od sterownika. Jeśli ValuePtr wynosi 0, timeout zostaje wyłączony, a próba połączenia czeka w nieskończoność.

Jeśli określony limit czasu przekroczy maksymalny limit logowania w źródle danych, sterownik zastępuje tę wartość i zwraca SQLSTATE 01S02 (Zmieniona wartość opcji).
SQL_ATTR_METADATA_ID (ODBC 3.0) Wartość SQLUINTEGER, która określa, jak traktowane są argumenty łańcuchowe funkcji katalogowych.

Jeśli SQL_TRUE, argument ciągu funkcji katalogowych traktowany jest jako identyfikatory. Sprawa nie jest istotna. Dla ciągów nierozdzielonych driver usuwa wszelkie space na końcu i struna jest składana do wielkich liter. Dla znaków oznaczonych driver usuwa wszelkie space prowadzące lub końcowe i bierze dosłownie to, co znajduje się między ogranicznikami. Jeśli jeden z tych argumentów zostanie ustawiony na wskaźnik null, funkcja zwraca SQL_ERROR oraz SQLSTATE HY009 (Nieprawidłowe użycie wskaźnika null).

Jeśli SQL_FALSE, argumenty ciągów funkcji katalogowych nie są traktowane jako identyfikatory. Sprawa jest istotna. Mogą zawierać wzorzec wyszukiwania łańcuchów lub nie, w zależności od argumentu.

Domyślna wartość to SQL_FALSE.

Argument TableTypew SQLTables, który przyjmuje listę wartości, nie jest objęty tym atrybutem.

SQL_ATTR_METADATA_ID można też ustawić na poziomie instrukcji. (Jest to jedyny atrybut połączenia, który jest jednocześnie atrybutem instrukcji.)

Aby uzyskać więcej informacji, zobacz Argumenty w funkcjach wykazu.
SQL_ATTR_ODBC_CURSORS (ODBC 2.0) Wartość SQLULEN określająca, jak Driver Manager korzysta z biblioteki kursorów ODBC:

SQL_CUR_USE_IF_NEEDED = Menedżer sterowników używa biblioteki kursorów ODBC tylko wtedy, gdy jest to konieczne. Jeśli sterownik obsługuje opcję SQL_FETCH_PRIOR w SQLFetchScroll, Driver Manager wykorzystuje możliwości przewijania sterownika. W przeciwnym razie korzysta z biblioteki kursorów ODBC.

SQL_CUR_USE_ODBC = Driver Manager korzysta z biblioteki kursorów ODBC.

SQL_CUR_USE_DRIVER = Menedżer sterowników wykorzystuje możliwości przewijania sterownika. Jest to ustawienie domyślne.

Więcej informacji o bibliotece kursorów ODBC można znaleźć w Załączniku F: Biblioteka kursorów ODBC. Uwaga: Biblioteka kursorów zostanie usunięta w przyszłej wersji Windows. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Firma Microsoft zaleca korzystanie z funkcji kursora sterownika.
SQL_ATTR_PACKET_SIZE (ODBC 2.0) Wartość SQLUINTEGER określająca rozmiar pakietu sieciowego w bajtach. Uwaga: Wiele źródeł danych albo nie obsługuje tej opcji, albo może jedynie zwracać, ale nie ustawiać rozmiaru pakietu sieciowego.

Jeśli podany rozmiar przekracza maksymalny rozmiar pakietu lub jest mniejszy niż minimalny, sterownik podstawia tę wartość i zwraca SQLSTATE 01S02 (zmieniona wartość opcji).

Jeśli aplikacja ustawi rozmiar pakietu po nawiązaniu połączenia, sterownik zwróci SQLSTATE HY011 (Attribute nie może być teraz ustawiony).
SQL_ATTR_QUIET_MODE (ODBC 2.0) Uchwyt okienny (HWND).

Jeśli uchwyt okna jest wskaźnikiem null, sterownik nie wyświetla żadnych okien dialogowych.

Jeśli uchwyt okna nie jest wskaźnikiem zerowym, powinien być uchwytem okna nadrzędnego aplikacji. Jest to opcja domyślna. Sterownik używa tego uchwytu do wyświetlania okien dialogowych. Uwaga: Atrybut SQL_ATTR_QUIET_MODE connection nie dotyczy okien dialogowych wyświetlanych przez SQLDriverConnect.
SQL_ATTR_TRACE (ODBC 1.0) Wartość SQLUINTEGER informująca Menedżera sterowników, czy wykonać śledzenie:

SQL_OPT_TRACE_OFF = Odrysowywanie (domyślne)

SQL_OPT_TRACE_ON = Śledzenie dalej

Gdy śledzenie jest włączone, Driver Manager zapisuje każde wywołanie funkcji ODBC do pliku śledzenia. Uwaga: Gdy trasowanie jest włączone, Driver Manager może zwracać SQLSTATE IM013 (błąd pliku śledzenia) z dowolnej funkcji.

Aplikacja określa plik śledzenia z opcją SQL_ATTR_TRACEFILE. Jeśli plik już istnieje, Driver Manager dodaje do niego dodatki. W przeciwnym razie plik się tworzy. Jeśli śledzenie jest włączone i nie został określony plik śledzenia, Driver Manager zapisuje plik do pliku SQL. LOGUJ się w katalogu głównym.

Aplikacja może ustawić zmienną ODBCSharedTraceFlag , aby umożliwić dynamiczne śledzenie. Następnie jest włączane śledzenie dla wszystkich obecnie działających aplikacji ODBC. Jeśli aplikacja wyłącza śledzenie, jest wyłączone tylko dla tej aplikacji.

Jeśli słowo kluczowe Trace w informacji systemowej jest ustawione na 1, gdy aplikacja wywołuje SQLAllocHandle z HandleType SQL_HANDLE_ENV, śledzenie jest włączone dla wszystkich uchwytów. Jest on włączony tylko dla aplikacji wywołanej SQLAllocHandle.

Wywołanie SQLSetConnectAttr z atrybutem SQL_ATTR_TRACE nie wymaga, aby argument ConnectionHandle był poprawny i nie zwróci SQL_ERROR, jeśli ConnectionHandle jest NULL. Ta cecha dotyczy wszystkich połączeń.
SQL_ATTR_TRACEFILE (ODBC 1.0) Ciąg znaków zakończony zerowym zawierający nazwę pliku śledzenia.

Domyślna wartość atrybutu SQL_ATTR_TRACEFILE jest określana za pomocą słowa kluczowego TraceFile w informacji systemowej. Więcej informacji można znaleźć w ODBC Subkey.

Wywołanie SQLSetConnectAttr z atrybutem SQL_ATTR_TRACEFILE nie wymaga, aby argument ConnectionHandle był ważny i nie zwróci SQL_ERROR, jeśli ConnectionHandle jest nieprawidłowy. Ta cecha dotyczy wszystkich połączeń.
SQL_ATTR_TRANSLATE_LIB (ODBC 1.0) Ciąg znaków zakończony zerowym zawierający nazwę biblioteki zawierającej funkcje SQLDriverToDataSource i SQLDataSourceToDriver , do których sterownik uzyskuje dostęp do zadań takich jak tłumaczenie zestawu znaków. Ta opcja może być wybrana tylko wtedy, gdy sterownik połączył się ze źródłem danych. Ustawienie tego atrybutu będzie trwało w różnych połączeniach. Więcej informacji o tłumaczeniu danych można znaleźć w Translation DLL oraz Translation DLL Function Reference.
SQL_ATTR_TRANSLATE_OPTION (ODBC 1.0) 32-bitowa wartość flagi przekazywana do tłumaczenia DLL. Ten atrybut może być określony tylko wtedy, gdy sterownik połączył się ze źródłem danych. Informacje o tłumaczeniu danych można znaleźć w sekcji Translation DLL.
SQL_ATTR_TXN_ISOLATION (ODBC 1.0) 32-bitowa maska bitowa ustalająca poziom izolacji transakcji dla bieżącego połączenia. Aplikacja musi wywołać SQLEndTran , aby zatwierdzić lub cofnąć wszystkie otwarte transakcje na połączeniu, przed wywołaniem SQLSetConnectAttr z tą opcją.

Poprawne wartości dla ValuePtr można określić, wywołując SQLGetInfo z InfoType równym SQL_TXN_ISOLATION_OPTIONS.

Aby uzyskać opis poziomów izolacji transakcji, zobacz opis typu informacji SQL_DEFAULT_TXN_ISOLATION w SQLGetInfo oraz Poziomach Izolacji Transakcji.

[1] Funkcje te można wywoływać asynchronicznie tylko wtedy, gdy deskryptor jest deskryptorem implementacyjnym, a nie deskryptorem aplikacji.

Przykład kodu

Zobacz SQLConnect.

Aby uzyskać informacje o Zobacz
Przydzielanie uchwytu SQLAllocHandle Function
Zwracanie ustawienia atrybutu połączenia SQLGetConnectAttr, funkcja