SQLParamData függvény

Megfelelőség
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92

Summary
Az SQLParamData a SQLPutData segítségével paraméteradatokat szolgáltatnak az utasításvégrehajtási időnél, míg az SQLGetData segítségével a streamelt kimeneti paraméteradatokat visszanyerik.

Syntax

  
SQLRETURN SQLParamData(  
     SQLHSTMT       StatementHandle,  
     SQLPOINTER *   ValuePtrPtr);  

Arguments

StatementHandle
[Bemenet] Utasításkezelő.

ValuePtrPtr
[Kimenet] Mutató egy pufferre, amelyben vissza kell adni a ParameterValuePtr puffer címét, amelyet az SQLBindParameter (paraméteradatokhoz) megadnak, vagy a TargetValuePtr puffer címét, amely az SQLBindCol-ban (oszlop adatokhoz) megadott, ahogyan az SQL_DESC_DATA_PTR leíró rekordmezőben található.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE vagy SQL_PARAM_DATA_AVAILABLE.

Diagnostics

Amikor az SQLParamData SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad vissza, egy hozzárendelt SQLSTATE érték elérhető SQLGetDiagRec hívásával, amely egy SQL_HANDLE_STMT HandleType és egy HandleType of StatementHandle (Handle) segítségével szól. Az alábbi táblázat felsorolja az SQLParamData által általában visszaadott SQLSTATE értékeket, és mindegyiket ezen függvény kontextusában magyarázza; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.

SQLSTATE Hiba Description
01000 Általános figyelmeztetés Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
07006 Korlátozott adattípus-attribútumok megsértése A kötött paraméterHEZ tartozó SQLBindParameterValueType argumentuma által azonosított adatérték nem konvertálható az SQLBindParameterParameterType argumentuma által azonosított adattípusra.

A SQL_PARAM_INPUT_OUTPUT vagy SQL_PARAM_OUTPUT kötött paraméter adatértéke nem konvertálható az SQLBindParameterValueType argumentuma által azonosított adattípusra.

(Ha egy vagy több sor adatértékei nem voltak átalakíthatók, de egy vagy több sor sikeresen visszavált, ez a függvény SQL_SUCCESS_WITH_INFO.)
08S01 Kommunikációs kapcsolat hibája Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás.
22026 Sztringadatok, hosszeltérés Az SQLGetInfo SQL_NEED_LONG_DATA_LEN információtípusa "Y" volt, és kevesebb adatot küldtek egy hosszú paraméterre (az adattípus SQL_LONGVARCHAR, SQL_LONGVARBINARY vagy egy hosszú adatforrás-specifikus adattípus volt), mint amit az SQLBindParameterStrLen_or_IndPtr argumentumával megadott volt.

Az SQLGetInfo SQL_NEED_LONG_DATA_LEN információtípusa "Y" volt, és kevesebb adatot küldtek egy hosszú oszlopra (az adattípus SQL_LONGVARCHAR, SQL_LONGVARBINARY vagy egy hosszú adatforrás-specifikus adattípus volt), mint amennyit a hosszpufferben megadott az adott sorban lévő adatoszlop, amelyet SQLBulkOperations vagy SQLSetPos frissített.
40001 Szerializálási hiba A tranzakció egy erőforrás holtpontja miatt lett visszaállítva egy másik tranzakcióval.
40003 Az utasítás befejezése ismeretlen A társított kapcsolat a függvény végrehajtása során meghiúsult, és a tranzakció állapota nem határozható meg.
HY000 Általános hiba Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát.
HY001 Memóriafoglalási hiba Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát.
HY008 A műveletet megszakították Az aszinkron feldolgozás engedélyezve lett a StatementHandle-ben. A függvényt hívták, és mielőtt befejezte volna a végrehajtást, a StatementHandle-enSQLCancel vagy SQLCancelHandle volt; a függvényt ezután ismét meghívták a StatementHandle-en.

A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle egy másik szálról lett meghívva a StatementHandle-ra egy többszálas alkalmazásból.
HY010 Függvényütemezési hiba (DM) Az előző függvényhívás nem volt SQLExecDirect, SQLExecute, SQLBulkOperations vagy SQLSetPos hívása, ahol a visszatérő kód SQL_NEED_DATA volt, vagy az előző függvényhívás SQLPutData hívás volt.

Az előző függvényhívás egy SQLParamData hívás volt.

(DM) A StatementHandle-hez társított kapcsolati leíróhoz aszinkron módon végrehajtó függvény lett meghívva. Ez az aszinkron függvény még akkor futott, amikor az SQLParamData függvényt hívták.

(DM) Egy aszinkron módon végrehajtó függvény (nem ez) lett meghívva az StatementHandle-hez , és a függvény meghívásakor továbbra is végrehajtó volt.

Az SQLExecute, SQLExecDirect, SQLBulkOperations vagy SQLSetPos a StatementHandle esetében meghívták, és SQL_NEED_DATA visszaadták. Az SQLCancelt az összes adat-végrehajtásnál megadott paraméter vagy oszlop elküldése előtt hívták meg.
HY013 Memóriakezelési hiba A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt.
HY117 A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. (DM) A felfüggesztett állapotról további információt az SQLEndTran függvényben talál.
HYT01 A kapcsolati időkorlát lejárt A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva.
IM001 Az illesztőprogram nem támogatja ezt a függvényt (DM) Az illesztőprogram, amely megfelel a StatementHandle-nek , nem támogatja a funkciót.
IM017 A lekérdezés aszinkron értesítési módban le van tiltva Az értesítési modell használata esetén a lekérdezés le van tiltva.
IM018 Az SQLCompleteAsync nem lett meghívva az előző aszinkron művelet végrehajtásához ezen a leírón. Ha a leíró előző függvényhívása SQL_STILL_EXECUTING ad vissza, és ha az értesítési mód engedélyezve van, az SQLCompleteAsync-et a leírón kell meghívni a művelet utófeldolgozásához és befejezéséhez.

Ha az SQLParamData-t egy paraméter adatainak küldése közben hívják meg az SQL utasításban, akkor vissza tud adni bármely SQLSTATE-t, amelyet az utasítás végrehajtásához hívott függvény (SQLExecute vagy SQLExecDirect) tud visszaadni. Ha az oszlop adatküldése közben hívják meg, amelyet frissítenek vagy hozzáadnak SQLBulkOperations-szel , vagy SQLSetPos-szal frissítenek, akkor bármilyen SQLBulkOperations vagy SQLSetPos által vissza tud téríthető SQLSTATE-et visszaadni.

Comments

Az SQLParamData két célra hívható futtatáskor adat szolgáltatására: paraméteradatokra, amelyeket az SQLExecute vagy SQLExecDirect hívásához használnak, vagy oszlopadatok, amelyeket akkor használnak fel, amikor egy sort frissítünk vagy hozzáadnak egy SQLBulkOperations hívással, vagy az SQLSetPos hívásával. A végrehajtáskor az SQLParamData visszaadja az alkalmazásnak egy jelzőt arról, hogy az illesztőprogramnak milyen adatot kell megkérnie.

Amikor egy alkalmazás az SQLExecute-t, SQLExecDirect-et, SQLBulkOperations-t vagy SQLSetPos-t hívja, az illesztőprogram SQL_NEED_DATA-t ad vissza, ha adat-futtatáskor adatra van szüksége. Ezután egy alkalmazás az SQLParamData-t hívja, hogy eldöntse, melyik adatot küldje. Ha az illesztőprogramnak paraméteradatokat kell megkérnie, az illesztőprogram a *ValuePtrPtr kimeneti pufferben visszaadja azt az értéket, amelyet az alkalmazás a sorhalmaz pufferbe helyezett. Az alkalmazás ezt az értéket felhasználva meghatározhatja, hogy a drivernek mely paraméteradatokat kéri. Ha az illesztőprogramhoz oszlopadatot kell írni, az illesztőprogram a *ValuePtrPtr pufferben visszaadja azt az címet, amelyhez az oszlop eredetileg kötött, a következőként:

Kötött cím + Kötés eloszlás + ((sorszám - 1) x elemméret)

ahol a változók a következő táblázat szerint definiálódnak.

Variable Description
Kötött cím Az SQLBindColTargetValuePtr argumentusával megadott cím.
Kötés elmozdulás Az érték a megadott címen tárolva, amely a SQL_ATTR_ROW_BIND_OFFSET_PTR mondattribútummal együtt van.
Sor szám A sorban lévő sor 1-es száma. Az alapértelmezett, egysoros fetch-ek esetén ez 1.
Elemméret A SQL_ATTR_ROW_BIND_TYPE állítás attribútumának értéke mind az adatokra, mind a hosszúság/indikátor pufferekre.

Emellett SQL_NEED_DATA-t is visszaad, ami jelzi az alkalmazásnak, hogy az SQLPutData-t kell hívnia az adatok elküldéséhez.

Az alkalmazás annyiszor hívja az SQLPutData-t , ahányszor szükséges, hogy elküldje az adatokat a végrehajtáskor az oszlophoz vagy paraméterhez. Miután az összes adat elküldődött az oszlophoz vagy paraméterhez, az alkalmazás ismét az SQLParamData-t hívja. Ha az SQLParamData ismét SQL_NEED_DATA ad, adatot kell küldeni egy másik paraméterhez vagy oszlophoz. Ezért az alkalmazás ismét az SQLPutData-t hívja. Ha az összes adat-végrehajtáskor elküldött adatot minden paraméterre vagy oszlopra, akkor az SQLParamData SQL_SUCCESS vagy SQL_SUCCESS_WITH_INFO értéket ad vissza, a *ValuePtrPtr értéke nem definiált, és az SQL utasítás végrehajtható, vagy feldolgozható az SQLBulkOperations vagy SQLSetPos hívás.

Ha az SQLParamData paraméteradatokat ad egy keresett frissítési vagy törlési utasításhoz, amely nem érinti az adatforrás sorait, akkor az SQLParamData hívása SQL_NO_DATA adja vissza.

További információért arról, hogyan továbbítják a data-at-execution paraméteradatokat a kijelentésvégrehajtási időnél, lásd: "Paraméterértékek átadása" az SQLBindParameter és a Hosszú adatok küldése. További információért arról, hogyan frissítik vagy adják hozzá az adat-végrehajtási oszlopadatokat, lásd az SQLSetPos "SQLSetPos használata" című szakaszát, az SQLBulkOperations "Nagy mennyiségű frissítés könyvjelzők segítségével", valamint a Long Data és SQLSetPos és SQLBulkOperations részeket.

Az SQLParamData meghívható az streamelt kimeneti paraméterek visszahívására. Amikor SQLMoreResults, SQLExecute, SQLGetData vagy SQLExecDirect SQL_PARAM_DATA_AVAILABLE visszaad, hívjuk SQLParamData-t , hogy meghatározd, melyik paraméter rendelkezik elérhető értékkel. További információért a SQL_PARAM_DATA_AVAILABLE és streamelt kimeneti paraméterekről lásd: Kimeneti paraméterek visszakeresése SQLGetData segítségével.

Kódpélda

Lásd: SQLPutData.

Információ erről: Nézze
Puffer kötése egy paraméterhez SQLBindParameter függvény
Utasításfeldolgozás megszakítása SQLCancel függvény
Paraméterről szóló információ visszaküldése egy állításban SQLDescribeParam függvény
SQL utasítás végrehajtása SQLExecDirect függvény
Előkészített SQL-utasítás végrehajtása SQLExecute függvény
Paraméteradatok küldése végrehajtási időpontban SQLPutData-függvény