Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Soulad
Zavedená verze: Dodržování standardů ODBC 1.0: ISO 92
Summary
SQLParamData se používají společně se SQLPutData k poskytování parametrů při vykonávání příkazu a se SQLGetData pro získávání streamovaných výstupních parametrů.
Syntax
SQLRETURN SQLParamData(
SQLHSTMT StatementHandle,
SQLPOINTER * ValuePtrPtr);
Arguments
StatementHandle
[Vstup] Popisovač příkazu
ValuePtrPtr
[Výstup] Ukazatel na buffer, do kterého se vrátí adresa bufferu ParameterValuePtr specifikovaného v SQLBindParameter (pro parametrová data) nebo adresa bufferu TargetValuePtr specifikovaného v SQLBindCol (pro sloupcová data), jak je obsaženo v poli SQL_DESC_DATA_PTR descriptor.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE nebo SQL_PARAM_DATA_AVAILABLE.
Diagnostika
Když SQLParamData vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLSTATE voláním SQLGetDiagRec s HandleType SQL_HANDLE_STMT a HandleStatementHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLParamData obvykle vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Obecné upozornění | Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 07006 | Porušení atributu omezeného datového typu | Datová hodnota identifikovaná argumentem ValueType v SQLBindParameter pro vázaný parametr nelze převést na datový typ identifikovaný argumentem ParameterType v SQLBindParameter. Hodnotu dat vrácenou pro parametr vázaný jako SQL_PARAM_INPUT_OUTPUT nebo SQL_PARAM_OUTPUT nelze převést na datový typ identifikovaný argumentem ValueType v SQLBindParameter. (Pokud nebylo možné převést datové hodnoty pro jeden nebo více řádků, ale jeden nebo více řádků bylo úspěšně vráceno, tato funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Selhání komunikačního propojení | Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce. |
| 22026 | Řetězcová data, neshoda délky | Informační typ SQL_NEED_LONG_DATA_LEN v SQLGetInfo byl "Y" a pro dlouhý parametr (datový typ byl SQL_LONGVARCHAR, SQL_LONGVARBINARY nebo dlouhý datový typ specifický pro zdroj dat) bylo odesláno méně dat, než bylo specifikováno argumentem StrLen_or_IndPtr v SQLBindParameter. Typ informací SQL_NEED_LONG_DATA_LEN v SQLGetInfo byl "Y" a pro dlouhý sloupec (typ dat byl SQL_LONGVARCHAR, SQL_LONGVARBINARY nebo dlouhý datový typ specifický pro zdroj dat) bylo odesláno méně dat, než bylo specifikováno v dlouhém bufferu odpovídajícím sloupci v řádku dat, která byla přidána nebo aktualizována pomocí SQLBulkOperations nebo aktualizována pomocí SQLSetPos. |
| 40001 | Selhání serializace | Transakce byla vrácena zpět kvůli vzájemnému zablokování prostředku s jinou transakcí. |
| 40003 | Neznámé dokončování příkazů | Přidružené připojení se nezdařilo během provádění této funkce a stav transakce nelze určit. |
| HY000 | Obecná chyba | Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu. |
| HY001 | Chyba přidělení paměti | Ovladač nemohl přidělit paměť, která je nutná k podpoře provádění nebo dokončování funkce. |
| HY008 | Operace byla zrušena. | Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla volána a před dokončením byla na StatementHandle vyvolána SQLCancel nebo SQLCancelHandle; funkce byla poté znovu volána na StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny. |
| HY010 | Chyba posloupnosti funkcí | (DM) Předchozí volání funkce nebylo voláním SQLExecDirect, SQLExecute, SQLBulkOperations nebo SQLSetPos , kde byl návratový kód SQL_NEED_DATA, ani předchozí volání funkce bylo voláním SQLPutData. Předchozí volání funkce bylo voláním SQLParamData. (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato asynchronní funkce se stále spouštěla, když byla volána funkce SQLParamData . (DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla. SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vracely SQL_NEED_DATA. SQLCancel byl volán před odesláním dat pro všechny parametry nebo sloupce dat při vykonání. |
| HY013 | Chyba správy paměti | Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti. |
| HY117 | Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. | (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran. |
| HYT01 | Vypršel časový limit připojení | Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Ovladač tuto funkci nepodporuje. | (DM) Ovladač odpovídající StatementHandle tuto funkci nepodporuje. |
| IM017 | Dotazování je zakázané v asynchronním režimu oznámení. | Při každém použití modelu oznámení je dotazování zakázané. |
| IM018 | K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. | Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci. |
Pokud je SQLParamData vyvolán při odesílání dat pro parametr v SQL příkazu, může vrátit jakýkoli SQLSTATE, který může být vrácen funkcí volanou k vykonání příkazu (SQLExecute nebo SQLExecDirect). Pokud je volán při odesílání dat pro sloupec, který je aktualizován nebo přidáván pomocí SQLBulkOperations , nebo se aktualizuje pomocí SQLSetPos, může vrátit jakýkoli SQLSTATE, který může vrátit SQLBulkOperations nebo SQLSetPos.
Comments
SQLParamData lze volat k poskytnutí dat při vykonání pro dva účely: parametrová data, která budou použita při volání SQLExecute nebo SQLExecDirect, nebo sloupcová data, která budou použita při aktualizaci nebo přidání řádku voláním do SQLBulkOperations , nebo při aktualizaci voláním do SQLSetPos. Při spuštění SQLParamData vrací aplikaci indikátor, která data ovladač vyžaduje.
Když aplikace volá SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos, ovladač SQL_NEED_DATA vrátí, pokud potřebuje data při vykonání. Aplikace pak volá SQLParamData , aby určila, která data má poslat. Pokud ovladač vyžaduje parametrová data, vrátí do výstupní bufferu *ValuePtrPtr hodnotu, kterou aplikace vložila do řádkového bufferu. Aplikace může tuto hodnotu použít k určení, která parametrická data ovladač požaduje. Pokud ovladač vyžaduje data ze sloupců, vrátí do bufferu *ValuePtrPtr adresu, ke které byl sloupec původně vázán, a to následovně:
Vázaná adresa + Posuv vázání + ((číslo řádku - 1) x velikost prvku)
kde proměnné jsou definovány podle následující tabulky.
| Variable | Description |
|---|---|
| Vázaná adresa | Adresa byla zadána argumentem TargetValuePtr v SQLBindCol. |
| Vazebný offset | Hodnota uložená na adrese uvedené s atributem SQL_ATTR_ROW_BIND_OFFSET_PTR příkazu. |
| Číslo řádku | Číslo založené na 1 řádku v sadě řádků. Pro načítání z jednoho řádku, což je výchozí nastavení, je to 1. |
| Velikost prvku | Hodnota atributu SQL_ATTR_ROW_BIND_TYPE příkazu pro data i buffery délky/indikátorů. |
Také vrací SQL_NEED_DATA, což je signál pro aplikaci, že by měla zavolat SQLPutData k odeslání dat.
Aplikace volá SQLPutData tolikrát, kolikrát je potřeba, aby odesla data při vykonání pro sloupec nebo parametr. Po odeslání všech dat pro sloupec nebo parametr aplikace znovu volá SQLParamData . Pokud SQLParamData opět vrátí SQL_NEED_DATA, musí být data odeslána pro jiný parametr nebo sloupec. Proto aplikace opět volá SQLPutData. Pokud byla všechna data při vykonání odeslána pro všechny parametry nebo sloupce, pak SQLParamData vrátí SQL_SUCCESS nebo SQL_SUCCESS_WITH_INFO, hodnota v *ValuePtrPtr je nedefinovaná a SQL příkaz může být vykonán nebo lze zpracovat volání SQLBulkOperations či SQLSetPos .
Pokud SQLParamData poskytuje parametrická data pro vyhledávaný update nebo delete příkaz, který neovlivňuje žádné řádky ve zdroji dat, volání SQLParamData vrátí SQL_NO_DATA.
Pro více informací o tom, jak jsou data parametrů dat-at-exekuce předávána při vykonávání příkazů, viz "Passing Parameter Values" v SQLBindParameter a Sending Long Data. Pro více informací o tom, jak jsou data o sloupcích při vykonání aktualizována nebo přidávána, viz sekce "Používání SQLSetPos" v SQLSetPos, "Provádění hromadných aktualizací pomocí záložek" v SQLBulkOperations a Long Data a SQLSetPos a SQLBulkOperations.
SQLParamData lze volat pro získání parametrů streamovaného výstupu. Když SQLMoreResults, SQLExecute, SQLGetData nebo SQLExecDirect vrátí SQL_PARAM_DATA_AVAILABLE, zavolejte SQLParamData a určíte, který parametr má k dispozici hodnotu. Pro více informací o parametrech SQL_PARAM_DATA_AVAILABLE a streamovaných výstupních parametrech viz Získávání výstupních parametrů pomocí SQLGetData.
Příklad kódu
Viz SQLPutData.
Související funkce
| Informace o | Podívejte se |
|---|---|
| Vazba bufferu na parametr | Funkce SQLBindParameter |
| Zrušení zpracování příkazů | SQLCancel – funkce |
| Vrácení informace o parametru ve výroku | SQLDescribeParam Function |
| Provádění SQL příkazu | SQLExecDirect Function |
| Spuštění připraveného příkazu SQL | FUNKCE SQLExecute |
| Odesílání dat parametrů v době provádění | funkce |