SQLParamData – funkce

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.

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 SQLPutData