SQLGetStmtAttr, funkcja

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.

Aby uzyskać informacje o Zobacz
Zwracanie ustawienia atrybutu połączenia SQLGetConnectAttr, funkcja
Ustawianie atrybutu połączenia SQLSetConnectAttr, funkcja
Ustawianie atrybutu instrukcji SQLSetStmtAttr, funkcja