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
SQLSetEnvAttr ustawia atrybuty regulujące aspekty środowisk.
Syntax
SQLRETURN SQLSetEnvAttr(
SQLHENV EnvironmentHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER StringLength);
Arguments
EnvironmentHandle
[Input] Zarządzanie środowiskiem.
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 32-bitową wartością całkowitą lub wskazuje na ciąg znaków zakończony zerowo.
StringLength
[Input] Jeśli ValuePtr wskazuje na ciąg znaków lub bufor binarny, ten argument powinien być długością *ValuePtr. Dla danych ciągu znaków argument ten powinien zawierać liczbę bajtów w ciągu znaków.
Jeśli ValuePtr jest liczbą całkowitą, StringLength jest ignorowana.
Zwroty
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR lub SQL_INVALID_HANDLE.
Diagnostyka
Gdy SQLSetEnvAttr zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_ENV oraz HandlemEnvironmentHandle. Poniższa tabela przedstawia wartości SQLSTATE typowo zwracane przez SQLSetEnvAttr 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. Jeśli sterownik nie obsługuje atrybutu środowiska, błąd może być zwracany tylko podczas czasu połączenia.
| SQLSTATE | Error | Opis |
|---|---|---|
| 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). |
| 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. |
| HY009 | Nieprawidłowe użycie wskaźnika o wartości null | Argument Attribute identyfikował atrybut środowiska wymagający wartości ciągu znaków, a argument ValuePtr był wskaźnikiem null. |
| HY010 | Błąd sekwencji funkcji | (DM) Uchwyt połączenia został przydzielony na EnvironmentHandle. (DM) SQL_ATTR_ODBC_VERSION nie został ustawiony z SQLSetEnvAttr , a Attribute nie jest równy SQL_ATTR_ODBC_VERSION. Nie musisz SQL_ATTR_ODBC_VERSION ustawiać wprost, jeśli używasz SQLAllocHandleStd. |
| 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ść. |
| HY090 | Nieprawidłowa długość ciągu lub buforu | 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. |
| 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 środowiskowym ODBC dla wersji ODBC obsługiwanej przez sterownik, ale nie była obsługiwana przez sam sterownik. (DM) Argument Atrybut był SQL_ATTR_OUTPUT_NTS, a ValuePtr SQL_FALSE. |
Comments
Aplikacja może wywołać SQLSetEnvAttr tylko wtedy, gdy w środowisku nie jest przydzielony uchwyt połączenia. Wszystkie atrybuty środowiska ustalone przez aplikację dla środowiska pozostają do momentu wywołania SQLFreeHandle w środowisku. W ODBC 3.x można jednocześnie przydzielać więcej niż jeden uchwyt środowiska.
Format informacji zestawiany przez ValuePtr zależy od określonego atrybutu. SQLSetEnvAttr akceptuje informacje atrybutowe w jednym z dwóch formatów: ciągu znaków zakończonym zerowym lub 32-bitowej wartości całkowitej. Format każdego z nich jest wskazany w opisie atrybutu.
Nie ma żadnych atrybutów środowiska specyficznych dla sterowników.
Atrybuty połączenia nie mogą być ustawiane przez wywołanie do SQLSetEnvAttr. Próba tego zwróci SQLSTATE HY092 (Nieprawidłowy atrybut/identyfikator opcji).
| Atrybut | Wartość Zawartości |
|---|---|
| SQL_ATTR_CONNECTION_POOLING (ODBC 3.8) | 32-bitowa wartość SQLUINTEGER, która umożliwia lub wyłącza pulowanie połączeń na poziomie środowiska. Używane są następujące wartości: SQL_CP_OFF = Pulowanie połączeń jest wyłączone. Jest to opcja domyślna. SQL_CP_ONE_PER_DRIVER = Obsługiwana jest pojedyncza pula połączeń dla każdego sterownika. Każde połączenie w puli jest powiązane z jednym sterownikiem. SQL_CP_ONE_PER_HENV = Obsługiwana jest pojedyncza pula połączeń dla każdego środowiska. Każde połączenie w puli jest powiązane z jednym środowiskiem. SQL_CP_DRIVER_AWARE = Skorzystaj z funkcji monitorowania puli połączeń sterownika, jeśli jest dostępna. Jeśli sterownik nie obsługuje świadomości puli połączeń, SQL_CP_DRIVER_AWARE jest ignorowana i używa się SQL_CP_ONE_PER_HENV. Aby uzyskać więcej informacji, zobacz Driver-Aware Zarządzanie Pulą Połączeń. W środowisku, gdzie niektóre sterowniki wspierają, a inne nie, SQL_CP_DRIVER_AWARE można włączyć funkcję świadomości puli połączeń na tych sterownikach, ale jest to równoważne ustawieniu SQL_CP_ONE_PER_HENV na tych sterownikach, które nie obsługują funkcji świadomości puli połączeń. Pula połączeń jest włączana przez wywołanie SQLSetEnvAttr , aby ustawić atrybut SQL_ATTR_CONNECTION_POOLING na SQL_CP_ONE_PER_DRIVER lub SQL_CP_ONE_PER_HENV. To wezwanie należy wykonać przed przydzieleniem przez aplikację środowiska udostępnionego, dla którego ma zostać włączone zarządzanie pulą połączeń. Uchwyt środowiskowy w wywołaniu SQLSetEnvAttr jest ustawiony na null, co czyni SQL_ATTR_CONNECTION_POOLING atrybutem na poziomie procesu. Po włączeniu puli połączeń aplikacja przydziela środowisko współdzielone przez wywołanie SQLAllocHandle z argumentem InputHandle ustawionym na SQL_HANDLE_ENV. Po włączeniu puli połączeń i wybraniu środowiska współdzielonego dla aplikacji, SQL_ATTR_CONNECTION_POOLING nie można zresetować dla tego środowiska, ponieważ SQLSetEnvAttr jest wywoływany z handlem środowiska null podczas ustawiania tego atrybutu. Jeśli ten atrybut jest ustawiony, gdy pulowanie połączeń jest już włączone w środowisku współdzielonym, atrybut wpływa tylko na środowiska współdzielone, które są alokowane później. Możliwe jest także włączenie poolingu połączeń w środowisku. Zwróć uwagę na następujące informacje o poolingu połączeń środowiskowych: - Umożliwienie pulowania połączeń na uchwytie NULL to atrybut na poziomie procesu. Następnie przydzielone środowiska będą środowiskiem współdzielonym i odziedziczą ustawienie pulowania połączeń na poziomie procesu. - Po przydzieleniu środowiska aplikacja może nadal zmienić ustawienia puli połączeń. - Jeśli pulowanie połączeń środowiskowych jest włączone, a sterownik połączenia korzysta z puli sterowników, pulowanie środowiskowe ma preferencję. SQL_ATTR_CONNECTION_POOLING jest zaimplementowany wewnątrz Driver Managera. Sterownik nie musi implementować SQL_ATTR_CONNECTION_POOLING. Aplikacje ODBC 2.0 i 3.0 mogą ustawiać tę cechę środowiska. Aby uzyskać więcej informacji, zobacz Buforowanie połączeń ODBC. |
| SQL_ATTR_CP_MATCH (ODBC 3.0) | 32-bitowa wartość SQLUINTEGER, która określa, jak połączenie jest wybierane z puli połączeń. Gdy wywoływane jest SQLConnect lub SQLDriverConnect , Driver Manager określa, które połączenie jest ponownie używane z puli. Driver Manager stara się dopasować opcje połączenia w wywołaniu oraz atrybuty połączenia ustalone przez aplikację do słów kluczowych i atrybutów połączeń w puli. Wartość tego atrybutu określa poziom precyzji kryteriów dopasowania. Do ustalenia wartości tego atrybutu używa się następujących wartości: SQL_CP_STRICT_MATCH = Ponownie używane są tylko połączenia, które dokładnie odpowiadają opcjam połączenia w wywołaniu oraz atrybutom połączenia ustawionym przez aplikację. Jest to opcja domyślna. SQL_CP_RELAXED_MATCH = Można użyć połączeń z dopasowanymi parametry połączenia słowami kluczowymi. Słowa kluczowe muszą się zgadzać, ale nie wszystkie atrybuty połączenia muszą się zgadzać. Więcej informacji o tym, jak Driver Manager wykonuje mecz podczas łączenia się z połączeniem pulowym, znajdziesz w SQLConnect. Aby uzyskać więcej informacji na temat buforowania połączeń, zobacz Buforowanie połączeń ODBC. |
| SQL_ATTR_ODBC_VERSION (ODBC 3.0) | 32-bitowa liczba całkowita określająca, czy dana funkcjonalność wykazuje zachowanie ODBC 2.x czy ODBC 3.x . Do ustalenia wartości tego atrybutu używa się następujących wartości: SQL_OV_ODBC3_80 = Menedżer sterowników i sterownik wykazują następujące zachowanie ODBC 3.8: - Kierowca zwraca i oczekuje kodów ODBC 3.x dla daty, czasu i znacznika czasu. - Sterownik zwraca kody ODBC 3.x SQLSTATE, gdy wywołane są SQLError, SQLGetDiagField lub SQLGetDiagRec . - Argument CatalogName w wywołaniu do SQLTables akceptuje wzór wyszukiwania. - Driver Manager obsługuje rozszerzalność typów danych w języku C. Aby uzyskać więcej informacji o rozszerzalności typów danych w C, zobacz Typy danych C w ODBC. Więcej informacji znajdziesz w artykule Co jest nowe w ODBC 3.8. SQL_OV_ODBC3 = Menedżer sterowników i sterownik wykazują następujące zachowanie ODBC 3.x : - Kierowca zwraca i oczekuje kodów ODBC 3.x dla daty, czasu i znacznika czasu. - Sterownik zwraca kody ODBC 3.x SQLSTATE, gdy wywołane są SQLError, SQLGetDiagField lub SQLGetDiagRec . - Argument CatalogName w wywołaniu do SQLTables akceptuje wzór wyszukiwania. - Driver Manager nie obsługuje rozszerzalności typu danych w C. SQL_OV_ODBC2 = Menedżer sterowników i sterownik wykazują następujące zachowanie ODBC 2.x . Jest to szczególnie przydatne w aplikacji ODBC 2.x pracującej z sterownikiem ODBC 3.x . - Kierowca zwraca i oczekuje kodów ODBC 2.x dla daty, godziny i znacznika czasu. - Sterownik zwraca kody SQLSTATE ODBC 2.x , gdy wywołane są SQLError, SQLGetDiagField lub SQLGetDiagRec . - Argument CatalogName w wywołaniu do SQLTables nie akceptuje wzorca wyszukiwania. - Driver Manager nie obsługuje rozszerzalności typu danych w C. Aplikacja musi ustawić ten atrybut środowiska przed wywołaniem jakiejkolwiek funkcji zawierającej argument SQLHENV, w przeciwnym razie wywołanie zwróci SQLSTATE HY010 (błąd sekwencji funkcji). Zależy od kierowcy, czy istnieją dodatkowe zachowania dla tych flag środowiskowych. - Więcej informacji można znaleźć w artykule Deklarowanie wersji ODBC aplikacji oraz zmian zachowań. |
| SQL_ATTR_OUTPUT_NTS (ODBC 3.0) | 32-bitowa liczba całkowita, która określa, jak sterownik zwraca dane ciągów znaków. Jeśli SQL_TRUE, sterownik zwraca dane ciągu zakończone zerowo. Jeśli SQL_FALSE, sterownik nie zwraca danych ciągu z zakończeniem null. Ten atrybut domyślnie przyjmuje SQL_TRUE. Wywołanie do SQLSetEnvAttr , aby ustawić go na SQL_TRUE, zwraca SQL_SUCCESS. Wywołanie do SQLSetEnvAttr , aby ustawić go na SQL_FALSE zwraca SQL_ERROR i SQLSTATE HYC00 (opcjonalna funkcja nie zaimplementowana). |
Powiązane funkcje
| Aby uzyskać informacje o | Zobacz |
|---|---|
| Przydzielanie uchwytu | SQLAllocHandle Function |
| Zwracanie ustawień atrybutu środowiskowego | SQLGetEnvAttr Function |