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ść
Wersja wprowadzona: Zgodność ze standardami ODBC 1.0: ISO 92
Podsumowanie
SQLParamData jest używany razem z SQLPutData do dostarczania danych parametrów podczas wykonywania instrukcji, a z SQLGetData do pobierania danych o parametrach wyjściowych strumieniowych.
Syntax
SQLRETURN SQLParamData(
SQLHSTMT StatementHandle,
SQLPOINTER * ValuePtrPtr);
Arguments
StatementHandle
[Dane wejściowe] Uchwyt instrukcji.
ValuePtrPtr
[Wyjście] Wskaźnik do bufora, w którym zwraca adres bufora ParametrValuePtr określonego w SQLBindParameter (dla danych parametrów) lub adres bufora TargetValuePtr określonego w SQLBindCol (dla danych kolumnowych), zawartego w polu rekordu SQL_DESC_DATA_PTR.
Zwroty
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE lub SQL_PARAM_DATA_AVAILABLE.
Diagnostyka
Gdy SQLParamData zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLstanową, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_STMT oraz HandleStatementHandle. Poniższa tabela przedstawia wartości SQLSTATE typowo zwracane przez SQLParamData 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). |
| 07006 | Naruszenie atrybutu typu danych z ograniczeniami | Nie można przekonwertować wartości danych zidentyfikowanej przez argument ValueType w parametrze SQLBindParameter dla powiązanego parametru na typ danych zidentyfikowany przez argument ParameterType w parametrze SQLBindParameter. Wartość danych zwrócona dla parametru powiązanego jako SQL_PARAM_INPUT_OUTPUT lub SQL_PARAM_OUTPUT nie można przekonwertować na typ danych zidentyfikowany przez argument ValueType w parametrze SQLBindParameter. (Jeśli wartości danych dla jednego lub więcej wierszy nie mogły zostać przekonwertowane, ale jeden lub więcej wierszy zostały pomyślnie zwrócone, funkcja ta zwraca SQL_SUCCESS_WITH_INFO.) |
| 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. |
| 22026 | Dane ciągu, niezgodność długości | Typ informacji SQL_NEED_LONG_DATA_LEN w SQLGetInfo to "Y", a dla długiego parametru (typ danych to SQL_LONGVARCHAR, SQL_LONGVARBINARY lub długi typ specyficzny dla źródła danych) wysyłano mniej danych niż w SQLBindParameter w argumentze StrLen_or_IndPtr. Typ informacji SQL_NEED_LONG_DATA_LEN w SQLGetInfo to "Y", a dla długiej kolumny (typ danych to SQL_LONGVARCHAR, SQL_LONGVARBINARY lub długi typ danych specyficzny dla źródła danych) wysyłano mniej danych niż w buforze długości odpowiadającym kolumnie w wierszu danych, które były dodawane lub aktualizowane za pomocą SQLBulkOperations lub aktualizowane za pomocą SQLSetPos. |
| 40001 | Niepowodzenie serializacji | Transakcja została wycofana z powodu zakleszczenia zasobów z inną transakcją. |
| 40003 | Ukończenie instrukcji nieznane | Skojarzone połączenie nie powiodło się podczas wykonywania tej funkcji, a nie można określić stanu transakcji. |
| 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. |
| HY008 | Operacja anulowana | Przetwarzanie asynchroniczne zostało włączone dla instrukcji StatementHandle. Funkcja była wywoływana, a przed zakończeniem wykonania wywoływano SQLCancel lub SQLCancelHandle na CommandHandle; funkcja była następnie wywoływana ponownie na CommandHandle. Wywołano funkcję , a przed zakończeniem wykonywania wywołano funkcję SQLCancel lub SQLCancelHandle na instrukcjiHandle z innego wątku w aplikacji wielowątku. |
| HY010 | Błąd sekwencji funkcji | (DM) Poprzednie wywołanie funkcji nie było wywołaniem do SQLExecDirect, SQLExecute, SQLBulkOperations ani SQLSetPos , gdzie kod powrotny był SQL_NEED_DATA, ani poprzednie wywołanie funkcji nie było wywołaniem do SQLPutData. Poprzednie wywołanie funkcji było wywołaniem do SQLParamData. (DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z instrukcją StatementHandle. Ta asynchroniczna funkcja działała nadal, gdy wywoływano funkcję SQLParamData . (DM) Asynchronicznie wykonująca funkcję (a nie tę) została wywołana dla instrukcji StatementHandle i nadal była wykonywana, gdy ta funkcja została wywołana. SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos zostały wywołane dla StatementHandle i zwracały SQL_NEED_DATA. SQLCancel był wywoływany przed wysłaniem danych dla wszystkich parametrów lub kolumn danych podczas wykonywania. |
| 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. |
| 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. |
| 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. |
| IM017 | Sondowanie jest wyłączone w trybie powiadomień asynchronicznych | Za każdym razem, gdy jest używany model powiadomień, sondowanie jest wyłączone. |
| IM018 | Funkcja SQLCompleteAsync nie została wywołana w celu ukończenia poprzedniej operacji asynchronicznej na tym dojściu. | Jeśli poprzednie wywołanie funkcji na dojściu zwraca SQL_STILL_EXECUTING i jeśli tryb powiadomień jest włączony, narzędzie SQLCompleteAsync musi być wywoływane na dojściu, aby wykonać przetwarzanie końcowe i zakończyć operację. |
Jeśli SQLParamData zostanie wywołana podczas wysyłania danych dla parametru w instrukcji SQL, może zwrócić dowolny stan SQL, który może zostać zwrócony przez funkcję wywołaną do wykonania polecenia (SQLExecute lub SQLExecDirect). Jeśli zostanie wywołany podczas wysyłania danych dla kolumny aktualizowanej lub dodawanej za pomocą SQLBulkOperations albo aktualizowanej przez SQLSetPos, może zwrócić dowolny stan SQL, który może zostać zwrócony przez SQLBulkOperations lub SQLSetPos.
Comments
SQLParamData można wywołać, aby dostarczyć dane podczas wykonania do dwóch zastosowań: danych parametrów używanych w wywołaniu do SQLExecute lub SQLExecDirect, lub danych kolumnowych, które będą używane podczas aktualizacji lub dodawania wiersza przez wywołanie do SQLBulkOperations albo przez wywołanie do SQLSetPos. W momencie wykonania SQLParamData zwraca aplikacji wskaźnik, które dane są wymagane przez sterownik.
Gdy aplikacja wywołuje SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos, sterownik zwraca SQL_NEED_DATA, jeśli potrzebuje danych danych podczas wykonywania. Następnie aplikacja wywołuje SQLParamData , aby określić, które dane wysłać do wysłania. Jeśli sterownik wymaga danych parametrów, zwraca w buforze wyjściowym *ValuePtrPtr wartość, którą aplikacja umieściła w buforze wiersza. Aplikacja może użyć tej wartości do określenia, o jakie dane parametrów pobiera sterownik. Jeśli sterownik wymaga danych kolumnowych, zwraca w buforze *ValuePtrPtr adres, do którego kolumna była pierwotnie powiązana, w następujący sposób:
Adres + powiązanyPrzesunięcie wiązania + ((Numer wiersza - 1) x Rozmiar elementu)
gdzie zmienne są zdefiniowane zgodnie z poniższą tabelą.
| Variable | Description |
|---|---|
| Adres powiązany | Adres podany argumentem TargetValuePtr w SQLBindCol. |
| Przesunięcie wiązania | Wartość zapisana pod adresem określonym za pomocą atrybutu SQL_ATTR_ROW_BIND_OFFSET_PTR. |
| Numer wiersza | Numer wiersza oparty na 1 w zestawie wierszy. Dla pobierania z pojedynczego wiersza, które są domyślne, jest to 1. |
| Rozmiar elementu | Wartość atrybutu SQL_ATTR_ROW_BIND_TYPE dla buforów danych i długości/wskaźników. |
Zwraca także SQL_NEED_DATA, co jest sygnałem dla aplikacji, że powinna wywołać SQLPutData , aby przesłać dane.
Aplikacja wywołuje SQLPutData tyle razy, ile jest konieczne, aby przesłać dane o wykonaniu danych dla kolumny lub parametru. Po wysłaniu wszystkich danych do kolumny lub parametru aplikacja ponownie wywołuje SQLParamData . Jeśli SQLParamData ponownie zwraca SQL_NEED_DATA, dane muszą zostać przesłane dla innego parametru lub kolumny. Dlatego aplikacja ponownie wywołuje SQLPutData. Jeśli wszystkie dane dane podczas wykonania zostały przesłane dla wszystkich parametrów lub kolumn, to SQLParamData zwraca SQL_SUCCESS lub SQL_SUCCESS_WITH_INFO, wartość w *ValuePtrPtr jest niezdefiniowana, a polecenie SQL może zostać wykonane lub wywołanie SQLBulkOperations lub SQLSetPos może zostać przetworzone.
Jeśli SQLParamData dostarcza dane parametrów dla wyszukiwanego polecenia update lub delete, które nie wpływa na żadne wiersze w źródle danych, wywołanie SQLParamData zwraca SQL_NO_DATA.
Aby uzyskać więcej informacji o tym, jak dane parametrów danych danych podczas wykonania są przekazywane podczas wykonywania instrukcji, zobacz "Passing Parameter Values" w SQLBindParameter oraz Sending Long Data. Aby uzyskać więcej informacji o tym, jak dane kolumny danych danych przy wykonaniu są aktualizowane lub dodawane, zobacz sekcję "Using SQLSetPos" w SQLSetPos, "Performing Bulk Updates Using Bookmarks" w SQLBulkOperations oraz Long Data i SQLSetPos i SQLBulkOperations.
SQLParamData można wywołać w celu pobrania parametrów strumieniowych wyników. Gdy SQLMoreResults, SQLExecute, SQLGetData lub SQLExecDirect zwracają SQL_PARAM_DATA_AVAILABLE, wywołaj SQLParamData , aby określić, który parametr ma dostępną wartość. Więcej informacji o parametrach wyjściowych SQL_PARAM_DATA_AVAILABLE i strumieniu można znaleźć w artykule Retrieving Output Parameters Using SQLGetData.
Przykład kodu
Zobacz SQLPutData.
Powiązane funkcje
| Aby uzyskać informacje o | Zobacz |
|---|---|
| Powiązanie bufora z parametrem | Funkcja SQLBindParameter |
| Anulowanie przetwarzania instrukcji | SQLCancel, funkcja |
| Zwracanie informacji o parametrze w instrukcji | Funkcja SQLDescribeParam |
| Wykonywanie instrukcji SQL | Funkcja SQLExecDirect |
| Wykonywanie przygotowanej instrukcji SQL | SQLExecute, funkcja |
| Wysyłanie danych parametrów w czasie wykonywania | SQLPutData, funkcja |