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
SQLGetStmtAttr zwraca aktualne ustawienie atrybutu instrukcji.
Note
Aby uzyskać więcej informacji o tym, do czego Driver Manager mapuje tę funkcję przy ODBC 3. Aplikacja x działa z ODBC 2. x driver, zobacz Funkcje zastępcze mapowania dla kompatybilności wstecznej aplikacji.
Syntax
SQLRETURN SQLGetStmtAttr(
SQLHSTMT StatementHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Arguments
StatementHandle
[Dane wejściowe] Uchwyt instrukcji.
Atrybut
[Input] Przypisuj do pobrania.
Valueptr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość atrybutu określonego w Attribute.
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ść zwracana w *ValuePtr jest ciągiem unikatowym (podczas wywoływania SQLGetStmtAttrW), 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, to BufferLength 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 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, to BufferLength powinien mieć wartość SQL_IS_POINTER.
Jeśli *ValuePtr zawiera typ danych o stałej długości, to 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 lub równa BufferLength, 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_ERROR lub SQL_INVALID_HANDLE.
Diagnostyka
Gdy SQLGetStmtAttr zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_STMT oraz HandleCommandHandle. Poniższa tabela przedstawia wartości SQLSTATE najczęściej zwracane przez SQLGetStmtAttr 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). |
| 24000 | Nieprawidłowy stan kursora | Atrybut argumentu był SQL_ATTR_ROW_NUMBER i kursor nie był otwarty, albo kursor znajdował się przed początkiem zbioru wyników lub po jego końcu. |
| 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 SQLGetDiagRec w argumencie 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. |
| HY010 | Błąd sekwencji funkcji | (DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z instrukcją StatementHandle. Ta asynchroniczna funkcja była nadal wykonywana, gdy wywoływano funkcję SQLGetStmtAttr . (DM) Funkcja wykonująca asynchronicznie została wywołana dla CommandHandle i nadal działała, gdy ta funkcja została wywołana. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos został wywołany dla instrukcjiHandle i zwrócił SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn. |
| 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. |
| HY109 | Nieprawidłowa pozycja kursora | Argument atrybutu był SQL_ATTR_ROW_NUMBER i wiersz został usunięty lub nie mógł zostać pobrany. |
| 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 instrukcji 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 CommandHandle nie obsługuje tej funkcji. |
Comments
Ogólne informacje o atrybutach instrukcji można znaleźć w sekcji Atrybuty instrukcji.
Wywołanie SQLGetStmtAttr zwraca w *ValuePtr wartość atrybutu polecenia określonego w Attribute. Ta wartość może być wartością SQLULEN lub ciągiem znaków zakończonym null. Jeśli wartość jest wartością SQLULEN, niektóre sterowniki mogą zapisywać tylko dolny 32-bitowy lub 16-bitowy bufora i pozostawiać wyższy bit bez zmian. Dlatego aplikacje powinny używać bufora SQLULEN i inicjalizować wartość do 0 przed wywołaniem tej funkcji. Ponadto argumenty BufferLength i StringLengthPtr nie są używane. Jeśli wartość jest ciągiem zakończonym null, aplikacja określa maksymalną długość tego ciągu w argumentze BufferLength , a sterownik zwraca długość tego ciągu w buforze *StringLengthPtr .
Aby umożliwić aplikacjom wywołującym SQLGetStmtAttr współpracę z ODBC 2. x drivers, wywołanie do SQLGetStmtAttr jest mapowane w Driver Manager na SQLGetStmtOption.
Poniższe atrybuty instrukcji są tylko do odczytu, więc mogą być pobrane przez SQLGetStmtAttr, ale nie są ustawiane przez SQLSetStmtAttr:
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_ROW_NUMBER
Listę atrybutów, które można ustawić i odzyskać, można znaleźć w SQLSetStmtAttr.
Powiązane funkcje
| Aby uzyskać informacje o | Zobacz |
|---|---|
| Zwracanie ustawienia atrybutu połączenia | SQLGetConnectAttr, funkcja |
| Ustawianie atrybutu połączenia | SQLSetConnectAttr, funkcja |
| Ustawianie atrybutu instrukcji | SQLSetStmtAttr, funkcja |