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.
DbMS definují dlouhá data jako libovolný znak nebo binární data v určité velikosti, například 254 znaků. Nemusí být možné uložit celou položku dlouhých dat do paměti, například když položka představuje dlouhý textový dokument nebo rastrový obrázek. Vzhledem k tomu, že taková data nelze uložit do jedné vyrovnávací paměti, zdroj dat je odešle ovladači v částech s SQLPutData při spuštění příkazu. Parametry, pro které se data odesílají v době spuštění, se označují jako parametry data při spuštění.
Poznámka:
Aplikace může ve skutečnosti odesílat libovolný typ dat v době provádění pomocí SQLPutData, i když lze posílat pouze znaky a binární data v částech. Pokud jsou však data dostatečně malá, aby se vešla do jedné vyrovnávací paměti, není obecně důvod použít SQLPutData. Mnohem jednodušší je připojit vyrovnávací paměť a nechat ovladač načíst data z vyrovnávací paměti.
Pokud chcete odesílat data v době provádění, aplikace provede následující akce:
Předá 32bitovou hodnotu, která identifikuje parametr v argumentu ParameterValuePtr v SQLBindParameter místo předání adresy vyrovnávací paměti. Tato hodnota není analyzována ovladačem. Později se to vrátí do aplikace, takže by to mělo mít pro aplikaci nějaký význam. Může to být například číslo parametru nebo popisovač souboru obsahujícího data.
Předá adresu vyrovnávací paměti pro délku nebo indikátor v argumentu StrLen_or_IndPtr u SQLBindParameter.
Uloží SQL_DATA_AT_EXEC nebo výsledek makra SQL_LEN_DATA_AT_EXEC(délka) do bufferu délky/ukazatele. Obě tyto hodnoty označují ovladač, že data pro parametr budou odeslána pomocí SQLPutData. SQL_LEN_DATA_AT_EXEC(délka) se používá při odesílání dlouhých dat do zdroje dat, který potřebuje vědět, kolik bajtů dlouhých dat se odešle, aby bylo možné předem přidělit místo. Chcete-li zjistit, zda zdroj dat vyžaduje tuto hodnotu, aplikace volá SQLGetInfo s možností SQL_NEED_LONG_DATA_LEN. Toto makro musí podporovat všechny ovladače; pokud zdroj dat nevyžaduje délku bajtu, může ho ovladač ignorovat.
Volá SQLExecute nebo SQLExecDirect. Ovladač zjistí, že vyrovnávací paměť délky/ukazatele obsahuje hodnotu SQL_DATA_AT_EXEC nebo výsledek makra SQL_LEN_DATA_AT_EXEC(délka) a vrátí SQL_NEED_DATA jako návratovou hodnotu funkce.
Volá SQLParamData v reakci na SQL_NEED_DATA návratovou hodnotu. Pokud je potřeba odeslat dlouhá data, vrátí SQLParamData SQL_NEED_DATA. Ve vyrovnávací paměti, na kterou odkazuje argument ValuePtrPtr, ovladač vrátí hodnotu, která identifikuje parametr provádění dat. Pokud existuje více než jeden parametr pro data při spuštění, aplikace musí tuto hodnotu použít k určení, pro který parametr budou odeslána data; ovladač není povinen požadovat data pro tyto parametry v žádném konkrétním pořadí.
Volá SQLPutData k odeslání dat parametrů do ovladače. Pokud se data parametrů nevejdou do jedné vyrovnávací paměti, což je často případ u dlouhých dat, aplikace volá SQLPutData opakovaně, aby odesílala data po částech; je na ovladači a zdroji dat, aby data znovu sestavil. Pokud aplikace předává řetězcová data ukončená hodnotou null, ovladač nebo zdroj dat musí v rámci procesu opětovného sestavení odebrat znak ukončení s hodnotou null.
Znovu volá SQLParamData , aby indikoval, že odeslala všechna data pro parametr. Pokud existují nějaké parametry dat při spuštění, pro které nebyla data odeslána, ovladač vrátí SQL_NEED_DATA a hodnotu, která identifikuje další parametr; aplikace se vrátí ke kroku 6. Pokud byla data odeslána pro všechny parametry provádění dat, příkaz se provede. SQLParamData vrací SQL_SUCCESS nebo SQL_SUCCESS_WITH_INFO a může vrátit jakoukoli hodnotu návratu nebo diagnostiku, kterou SQLExecute nebo SQLExecDirect mohou vrátit.
Jakmile sqlExecute nebo SQLExecDirect vrátí SQL_NEED_DATA a před tím, než se data úplně odešlou pro poslední parametr data při spuštění, příkaz je ve stavu Need Data. Zatímco příkaz je ve stavu Need Data, aplikace může volat pouze SQLPutData, SQLParamData, SQLCancel, SQLGetDiagField nebo SQLGetDiagRec; všechny ostatní funkce vrací SQLSTATE HY010 (chyba sekvence funkcí). Volání sqlCancel zruší provádění příkazu a vrátí ho do předchozího stavu. Další informace naleznete v dodatku B: Tabulky přechodu stavu ODBC.
Příklad odesílání dat v době spuštění naleznete v popisu funkce SQLPutData .