Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Powiązane funkcje
| 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 |