SQLSetEnvAttr, funkcja

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).
Aby uzyskać informacje o Zobacz
Przydzielanie uchwytu SQLAllocHandle Function
Zwracanie ustawień atrybutu środowiskowego SQLGetEnvAttr Function