SQLGetConnectAttr, funkcja

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

Podsumowanie
SQLGetConnectAttr zwraca aktualne ustawienie atrybutu połączenia.

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 SQLGetConnectAttr(  
     SQLHDBC        ConnectionHandle,  
     SQLINTEGER     Attribute,  
     SQLPOINTER     ValuePtr,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   StringLengthPtr);  

Arguments

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

Atrybut
[Input] Przypisuj do pobrania.

Valueptr
[Wyjście] Wskaźnik do pamięci, w którym można zwrócić aktualną wartość atrybutu określonego przez atrybut. Dla atrybutów typu całkowitego niektóre sterowniki mogą zapisywać tylko dolny 32-bitowy lub 16-bitowy bufora, pozostawiając wyższy bit bez zmian. Dlatego aplikacje powinny używać bufora SQLULEN i inicjalizować wartość do 0 przed wywołaniem tej funkcji.

Jeśli ValuePtr jest NULL, StringLengthPtr nadal zwraca łączną liczbę bajtów (z wyłączeniem znaku zakończenia zera dla danych znaków) dostępnych do zwrócenia w buforze wskazanym przez ValuePtr.

BufferLength
[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. Jeśli Attribute jest atrybutem zdefiniowanym przez ODBC, a *ValuePtr jest liczbą całkowitą, BufferLength jest ignorowany. Jeśli wartość w *ValuePtr jest ciągiem Unicode (wywołując SQLGetConnectAttrW), argument BufferLength musi mieć parzystą liczbę.

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

  • Jeśli *ValuePtr jest wskaźnikiem do ciągu znaków, BufferLength to długość tego ciągu.

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

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

  • Jeśli *ValuePtr zawiera typ danych o stałej długości, BufferLength jest albo SQL_IS_INTEGER, albo SQL_IS_UINTEGER, w zależności od potrzeby.

StringLengthPtr
[Wyjście] Wskaźnik do bufora, w którym można zwrócić łączną liczbę bajtów (z wyłączeniem znaku zakończenia zerowego) dostępnych do zwrotu w *ValuePtr. Jeśli wartość atrybutu jest ciągiem znaków, a liczba bajtów dostępnych do zwrócenia jest większa niż BufferLength minus długość znaku zakończenia zerowego, dane w *ValuePtr są obcięte do BufferLength minus długość znaku zakończenia zerowego i są zakończane przez sterownik.

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy SQLGetConnectAttr zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, powiązaną wartość SQLSTATE można uzyskać ze struktury diagnostycznych, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_DBC oraz HandleHandle. Poniższa tabela przedstawia wartości SQLSTATE zazwyczaj zwracane przez SQLGetConnectAttr 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.

SQLSTATE Error Description
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
01004 Dane ciągów, prawe obcięte Dane zwracane w *ValuePtr zostały obcięte do BufferLength minus długość znaku zakończenia zerowego. Długość wartości nieobciętego ciągu jest zwracana w *StringLengthPtr. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
08003 Połączenie nie jest otwarte (DM) Określono wartość atrybutu wymagającą otwartego 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.
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 zwracany ze struktury diagnostycznej przez argument MessageText w SQLGetDiagField 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.
HY010 Błąd sekwencji funkcji (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.

(DM) SQLExecute, SQLExecDirect lub SQLMoreResults zostały wywołane dla ConnectionHandle i zwracały SQL_PARAM_DATA_AVAILABLE. Ta funkcja została wywołana przed pobraniem danych dla wszystkich parametrów przesyłanych strumieniowo.
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.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) *ValuePtr to ciąg znaków, a BufferLength był mniejszy niż zero, ale nie równy SQL_NTS.
HY092 Nieprawidłowy identyfikator atrybutu/opcji Wartość określona dla atrybutu argumentu nie była ważna dla wersji ODBC obsługiwanej przez sterownik.
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) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz SQLEndTran, funkcja.
HYC00 Opcjonalna funkcja nie zaimplementowana Wartość określona dla atrybutu argumentu była prawidłowym atrybutem połączenia ODBC dla wersji ODBC obsługiwanej przez sterownik, ale nie była obsługiwana 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 odpowiadający funkcji ConnectionHandle nie obsługuje funkcji.

Comments

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

Listę atrybutów, które można ustawić, można znaleźć w SQLSetConnectAttr. Zauważ, że jeśli Attribute określa atrybut zwracający ciąg znaków, ValuePtr musi być wskaźnikiem do bufora dla tego ciągu. Maksymalna długość zwróconego ciągu łańcucha, wliczając znak zakończenia zerowego, to bajty BufferLength .

W zależności od atrybutu, aplikacja nie musi nawiązywać połączenia przed wywołaniem SQLGetConnectAttr. Jednak jeśli wywołane zostanie SQLGetConnectAttr , a określony atrybut nie ma domyślnego i nie został ustawiony przez wcześniejsze wywołanie SQLSetConnectAttr, SQLGetConnectAttr zwróci SQL_NO_DATA.

Jeśli Attribute jest SQL_ATTR_ TRACE lub SQL_ATTR_ TRACEFILE, ConnectionHandle nie musi być ważny, a SQLGetConnectAttr nie zwróci SQL_ERROR ani SQL_INVALID_HANDLE, jeśli ConnectionHandle jest nieprawidłowy. Te cechy dotyczą wszystkich połączeń. SQLGetConnectAttr zwróci SQL_ERROR lub SQL_INVALID_HANDLE, jeśli inny argument jest nieprawidłowy.

Chociaż aplikacja może ustawiać atrybuty instrukcji za pomocą SQLSetConnectAttr, nie może użyć SQLGetConnectAttr do pobierania wartości atrybutów instrukcji; musi wywołać SQLGetStmtAttr , aby pobrać ustawienia atrybutów instrukcji.

Zarówno atrybuty połączenia SQL_ATTR_AUTO_IPD, jak i SQL_ATTR_CONNECTION_DEAD mogą być zwracane przez wywołanie do SQLGetConnectAttr , ale nie można ich ustawić przez wywołanie do SQLSetConnectAttr.

Note

Nie ma asynchronicznego wsparcia dla SQLGetConnectAttr. Podczas implementacji SQLGetConnectAttr sterownik może poprawić wydajność, minimalizując liczbę przesyłanych lub żądanych informacji z serwera.

Aby uzyskać informacje o Zobacz
Zwracanie ustawienia atrybutu instrukcji SQLGetStmtAttr, funkcja
Ustawianie atrybutu połączenia SQLSetConnectAttr, funkcja
Ustawianie atrybutu środowiskowego SQLSetEnvAttr Function
Ustawianie atrybutu instrukcji SQLSetStmtAttr, funkcja