Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
megfelelőségi
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92
összefoglaló
SQLGetData az eredményhalmaz egyetlen oszlopának vagy egyetlen paraméterének adatait kéri le, miután SQLParamData SQL_PARAM_DATA_AVAILABLE ad vissza. Több alkalommal is meghívható, ha változó hosszúságú adatokat kér le részekben.
Szintaxis
SQLRETURN SQLGetData(
SQLHSTMT StatementHandle,
SQLUSMALLINT Col_or_Param_Num,
SQLSMALLINT TargetType,
SQLPOINTER TargetValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_IndPtr);
Érvek
StatementHandle
[Bemenet] Utasításkezelő.
Col_or_Param_Num
[Bemenet] Az oszlopadatok beolvasásához annak az oszlopnak a száma, amelyhez adatokat szeretne visszaadni. Az eredményhalmaz oszlopai 1-től kezdődően növekvő oszlopsorrendben vannak számmal eladva. A könyvjelző oszlop értéke 0; ez csak akkor adható meg, ha a könyvjelzők engedélyezve vannak.
A paraméteradatok lekéréséhez a paraméter sorszáma, amely 1-nél kezdődik.
TargetType
[Bemenet] A *TargetValuePtr puffer C adattípusának típusazonosítója. Az érvényes C adattípusok és típusazonosítók listáját a D függelék C adattípusai szakaszában találja.
Ha TargetType SQL_ARD_TYPE, az illesztőprogram az ARD SQL_DESC_CONCISE_TYPE mezőjében megadott típusazonosítót használja. Ha TargetType SQL_APD_TYPE, SQLGetData ugyanazt a C adattípust fogja használni, amelyet SQLBindParameter. Ellenkező esetben az SQLGetData
Kiterjesztett C-adattípust is megadhat. További információ: C-adattípusok az ODBC.
TargetValuePtr
[Kimenet] Mutasson arra a pufferre, amelyben az adatokat vissza szeretné adni.
TargetValuePtr nem lehet NULL értékű.
BufferLength
[Bemenet] A *TargetValuePtr puffer hossza bájtban.
Az illesztőprogram BufferLength használatával elkerüli, hogy a *TargetValuePtr puffer vége után írjon változó hosszúságú adatokat, például karakter- vagy bináris adatokat. Vegye figyelembe, hogy az illesztőprogram megszámolja a null-végződés karaktert, amikor karakteradatokat ad vissza *TargetValuePtr. * TargetValuePtr ezért szóközt kell tartalmaznia a null-végződés karakterhez, vagy az illesztőprogram csonkítani fogja az adatokat.
Ha az illesztőprogram rögzített hosszúságú adatokat, például egész számokat vagy dátumstruktúrát ad vissza, az illesztőprogram figyelmen kívül hagyja BufferLength, és feltételezi, hogy a puffer elég nagy az adatok tárolásához. Ezért fontos, hogy az alkalmazás elegendő nagy puffert foglaljon le a rögzített hosszúságú adatokhoz, vagy az illesztőprogram a puffer végén ír.
SQLGetData az SQLSTATE HY090 -t (érvénytelen sztring vagy pufferhossz) adja vissza, ha BufferLength kisebb, mint 0, de akkor nem, ha BufferLength értéke 0.
StrLen_or_IndPtr
[Kimenet] Mutasson arra a pufferre, amelyben a hossz vagy a mutató értékét adja vissza. Null mutató esetén a függvény nem ad vissza hossz- vagy mutatóértéket. Ez hibát ad vissza, ha a beolvasandó adatok NULL értékűek.
SQLGetData a hossz/mutató pufferében a következő értékeket adja vissza:
A visszaadni kívánt adatok hossza
SQL_NO_TOTAL
SQL_NULL_DATA
További információ: A hossz/mutatóértékek és a "Megjegyzések" használata ebben a témakörben.
Visszatér
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnosztika
Amikor SQLGetData SQL_ERROR vagy SQL_SUCCESS_WITH_INFO ad vissza, a társított SQLSTATE-érték úgy érhető el, hogy meghívja SQLGetDiagRec egy SQL_HANDLE_STMT HandleType és HandleStatementHandle. Az alábbi táblázat felsorolja a SQLGetData által gyakran visszaadott SQLSTATE-értékeket, és ismerteti azokat a függvény kontextusában; a(z) "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATES-ek leírását. 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 | Leírás |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01004 | Sztringadatok, jobb csonkolt | A megadott oszlop (Col_or_Param_Num) nem minden adata kérhető le a függvény egyetlen hívásában. SQL_NO_TOTAL vagy az SQLGetData További információ az SQLGetData |
| 01S07 | Tört csonkolás | Az egy vagy több oszlophoz visszaadott adatok csonkolódtak. Numerikus adattípusok esetén a szám törtrésze csonkolt. Az időösszetevőt tartalmazó idő-, időbélyeg- és intervallum-adattípusok esetében az idő tört része csonkolva lett. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 07006 | Korlátozott adattípus-attribútumok megsértése | Az eredményhalmaz egyik oszlopának adatértéke nem konvertálható a TargetType argumentum által megadott C adattípusra. |
| 07009 | Érvénytelen leíró index | A Col_or_Param_Num argumentumhoz megadott érték 0, a SQL_ATTR_USE_BOOKMARKS utasítás attribútum pedig SQL_UB_OFF. A Col_or_Param_Num argumentumhoz megadott érték nagyobb volt, mint az eredményhalmaz oszlopainak száma. A Col_or_Param_Num érték nem volt egyenlő a rendelkezésre álló paraméter sorszámával. (DM) A megadott oszlop kötött volt. Ez a leírás nem vonatkozik azokra az illesztőprogramokra, amelyek az SQLGetInfo (DM) A megadott oszlop száma kisebb vagy egyenlő a legmagasabb kötött oszlop számával. Ez a leírás nem vonatkozik azokra az illesztőprogramokra, amelyek az SQLGetInfo (DM) Az alkalmazás már meghívta SQLGetData az aktuális sorhoz; az aktuális hívásban megadott oszlop száma kisebb volt, mint az előző hívásban megadott oszlop száma; és az illesztő nem adja vissza a SQL_GETDATA_EXTENSIONS SQL_GD_ANY_ORDER bitmaszkot SQLGetInfo. (DM) A TargetType argumentum SQL_ARD_TYPE volt, és az ARD Col_or_Param_Num leíró rekordja nem tudta ellenőrizni a konzisztencia-ellenőrzést. (DM) A TargetType argumentum SQL_ARD_TYPE volt, és az ARD SQL_DESC_COUNT mezőjének értéke kisebb volt, mint a Col_or_Param_Num argumentum. |
| 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. |
| 22002 | A mutatóváltozó kötelező, de nincs megadva | StrLen_or_IndPtr null mutató volt, és null értékű adatok lekérése történt. |
| 22003 | Numerikus érték a tartományon kívül | Az oszlop numerikus értékének (számként vagy sztringként) visszaadása a szám egészének (a törtrész helyett) csonkolását eredményezte volna. További információ: D függelék: Adattípusok. |
| 22007 | Érvénytelen dátum/idő formátum | Az eredményhalmaz karakteroszlopa C dátum-, idő- vagy időbélyeg-struktúrához volt kötve, és az oszlop értéke érvénytelen dátum, idő vagy időbélyeg volt. További információ: D függelék: Adattípusok. |
| 22012 | Osztás nullával | Egy olyan aritmetikai kifejezésből származó érték lett visszaadva, amely nullával való osztást eredményezett. |
| 22015 | Intervallummező túlcsordult | Ha pontos numerikus vagy intervallum TÍPUSÚ SQL-típust rendel egy C intervallumtípushoz, az jelentős számjegyek elvesztését okozta a kezdő mezőben. Amikor adatokat ad vissza egy C intervallumtípusnak, nem volt ábrázolva az SQL-típus értéke a C intervallumtípusban. |
| 22018 | Érvénytelen karakterérték az öntött specifikációhoz | Az eredményhalmaz egyik karakteroszlopa vissza lett adva egy C karakterpufferbe, és az oszlop tartalmazott egy karaktert, amelynek nem volt ábrázolása a puffer karakterkészletében. A C típus pontos vagy hozzávetőleges numerikus, dátum- vagy intervallum típusú volt; az oszlop SQL-típusa karakteres adattípus volt; és az oszlop értéke nem a kötött C típus érvényes literálja volt. |
| 24000 | Érvénytelen kurzorállapot | (DM) A függvény meghívása SQLFetch vagy SQLFetchScroll hívása nélkül történt, hogy a kurzort a szükséges adatsorra helyezze. (DM) A StatementHandle végrehajtott állapotban volt, de a StatementHandlenem társított eredménykészletet. A kurzor meg volt nyitva a StatementHandle, és SQLFetch vagy SQLFetchScroll meghívták, de a kurzor az eredményhalmaz kezdete vagy az eredményhalmaz vége előtt volt. |
| 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. A 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. |
| HY003 | A program típusa kívül esik a tartományon | (DM) A TargetType (DM) Az argumentum |
| HY008 | Művelet megszakítva | Az aszinkron feldolgozás engedélyezve lett a StatementHandle. A függvényt meghívták, és a végrehajtás befejezése előtt SQLCancel vagy SQLCancelHandle a StatementHandle, majd a függvényt ismét meghívták a StatementHandle. A függvény meghívása megtörtént, és a végrehajtás befejezése előtt SQLCancel vagy SQLCancelHandle a StatementHandle egy másik szálhoz egy többszálas alkalmazáshoz, majd a függvényt ismét meghívták a StatementHandle. |
| HY009 | Érvénytelen null mutató használata | (DM) A TargetValuePtr argumentum |
| HY010 | Függvényütemezési hiba | (DM) A megadott StatementHandle nem volt végrehajtva. A függvény meghívása SQLExecDirect, SQLExecute vagy katalógusfüggvény meghívása nélkül történt. (DM) A rendszer aszinkron módon végrehajtó függvényt hívott meg a StatementHandletársított kapcsolati leíróhoz. Ez az aszinkron függvény továbbra is a SQLGetData függvény meghívásakor lett végrehajtva. (DM) A StatementHandle aszinkron módon végrehajtó függvény (nem ez) lett meghívva, és a függvény meghívásakor továbbra is végrehajtó volt. (DM) SQLExecute, SQLExecDirect, SQLBulkOperationsvagy SQLSetPos meghívást kapott az StatementHandle, és visszaadta SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. (DM) A StatementHandle végrehajtott állapotban volt, de a StatementHandlenem társított eredménykészletet. Az SQLExecute |
| 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. |
| HY090 | Érvénytelen sztring vagy puffer hossza | (DM) A BufferLength Az BufferLength argumentumhoz megadott érték kisebb, mint 4, a Col_or_Param_Num argumentum értéke 0, az illesztő pedig ODBC 2*.x* illesztőprogram volt. |
| HY109 | Érvénytelen kurzorpozíció | A kurzort (SQLSetPos, SQLFetch, SQLFetchScrollvagy SQLBulkOperations) egy olyan sorra helyezték, amelyet töröltek vagy nem sikerült beolvasni. A kurzor csak előre mutató kurzor volt, és a sorhalmaz mérete nagyobb volt, mint egy. |
| 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) További információ a felfüggesztett állapotról: SQLEndTran függvény. |
| HYC00 | A választható funkció nem implementálva | Az illesztőprogram vagy az adatforrás nem támogatja SQLGetData több sorból álló használatát SQLFetchScroll. Ez a leírás nem vonatkozik azokra az illesztőprogramokra, amelyek az SQLGetInfo Az illesztőprogram vagy az adatforrás nem támogatja a TargetType argumentum és a megfelelő oszlop SQL-adattípusának kombinációjával megadott átalakítást. Ez a hiba csak akkor érvényes, ha az oszlop SQL-adattípusát illesztőprogram-specifikus SQL-adattípusra képezték le. Az illesztőprogram csak az ODBC 2*.x* fájlt támogatja, és a TargetType SQL_C_NUMERIC SQL_C_SBIGINT SQL_C_UBIGINT és az C adattípusok D. függelékében felsorolt C adattípusok bármelyikét. Az illesztőprogram csak a 3.50 előtti ODBC-verziókat támogatja, és a TargetType |
| HYT01 | A kapcsolat időtúllépése 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 SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) A StatementHandle megfelelő illesztőprogram nem támogatja a függvényt. |
| 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 | 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, SQLCompleteAsync kell meghívni a leíróra a művelet utófeldolgozásához és befejezéséhez. |
Megjegyzések
SQLGetData egy megadott oszlop adatait adja vissza.
Az SQLGetData streamelt kimeneti paraméterekkel való használatáról a Kimeneti paraméterek lekérése az SQLGetDatahasználatával című témakörben olvashat.
Az SQLGetData használata
Ha az illesztő nem támogatja az SQLGetData
A sofőrök ezen korlátozások bármelyikét enyhíthetik. Annak megállapításához, hogy az illesztőprogramok milyen korlátozásokkal lazítanak, egy alkalmazás meghívja SQLGetInfo az alábbi SQL_GETDATA_EXTENSIONS lehetőségek bármelyikével:
SQL_GD_OUTPUT_PARAMS = SQLGetData hívható meg a kimeneti paraméterértékek visszaadásához. További információ: Kimeneti paraméterek lekérése SQLGetDatahasználatával.
SQL_GD_ANY_COLUMN. Ha ezt a lehetőséget adja vissza, SQLGetData bármely kötetlen oszlophoz meghívható, beleértve az utolsó kötött oszlop előtti oszlopokat is.
SQL_GD_ANY_ORDER. Ha ezt a lehetőséget adja vissza, SQLGetData bármilyen sorrendben meghívható kötetlen oszlopokra.
SQL_GD_BLOCK. Ha ezt a lehetőséget SQLGetInfo adja vissza a SQL_GETDATA_EXTENSIONS InfoType-hoz, az illesztő támogatja SQLGetData hívásait, ha a sorhalmaz mérete 1-nél nagyobb, és az alkalmazás meghívhatja SQLSetPos, és az SQL_POSITION beállítással a kurzort a megfelelő sorba helyezheti, mielőtt meghívja SQLGetData-t.
SQL_GD_BOUND. Ha ezt a lehetőséget adja vissza, SQLGetData is meghívható kötött és kötetlen oszlopokhoz.
Ezek alól a korlátozások alól két kivétel van, és a járművezetők ellazíthatják őket. Először is, SQLGetData soha nem szabad csak előre mutató kurzort hívni, ha a sorhalmaz mérete 1-nél nagyobb. Másodszor, ha egy illesztőprogram támogatja a könyvjelzőket, mindig támogatnia kell SQLGetData meghívását a 0 oszlophoz, még akkor is, ha az alkalmazások nem tudják meghívni SQLGetData az utolsó kötött oszlop előtti többi oszlophoz. (Ha egy alkalmazás ODBC 2*.x* illesztőprogrammal dolgozik,
SQLGetData nem használható az imént beszúrt sorok könyvjelzőjének lekérésére, ha meghívja SQLBulkOperations a SQL_ADD beállítással, mert a kurzor nincs a sorban. Az alkalmazások lekérhetik az ilyen sorok könyvjelzőit a 0. oszlop kötésével, mielőtt meghívják SQLBulkOperations SQL_ADD, ebben az esetben SQLBulkOperations visszaadja a könyvjelzőt a kötött pufferben. SQLFetchScroll ezután meghívható SQL_FETCH_BOOKMARK a kurzor áthelyezéséhez az adott sorra.
Ha a TargetType argumentum intervallum típusú adattípus, az adatokhoz az ARD SQL_DESC_DATETIME_INTERVAL_PRECISION és SQL_DESC_PRECISION mezőiben beállított alapértelmezett időközi kezdő pontosságot (2) és az alapértelmezett időköz másodperces pontosságot (6) kell használni. Ha a TargetType argumentum egy SQL_C_NUMERIC adattípus, az adatokhoz az ARD SQL_DESC_PRECISION és SQL_DESC_SCALE mezőiben beállított alapértelmezett pontosságot (illesztőprogram által definiált) és alapértelmezett skálát (0) kell használni. Ha bármilyen alapértelmezett pontosság vagy skálázás nem megfelelő, az alkalmazásnak explicit módon be kell állítania a megfelelő leíró mezőt az SQLSetDescField vagy SQLSetDescRechívásával. Beállíthatja a SQL_DESC_CONCISE_TYPE mezőt úgy, hogy SQL_C_NUMERIC, és meghívja SQLGetData egy TargetType argumentummal a SQL_ARD_TYPE, ami a leíró mezők pontosságát és méretezését eredményezi.
Jegyzet
Az ODBC 2*.x*-ban az alkalmazások TargetType SQL_C_DATE, SQL_C_TIME vagy SQL_C_TIMESTAMP értékre állítva jelzik, hogy *TargetValuePtr dátum, idő vagy időbélyeg szerkezet. Az ODBC 3*.x*-ban az alkalmazások TargetType SQL_C_TYPE_DATE, SQL_C_TYPE_TIME vagy SQL_C_TYPE_TIMESTAMP. Az Illesztőprogram-kezelő szükség esetén megfelelő leképezéseket készít az alkalmazás és az illesztőprogram verziója alapján.
Variable-Length adatok beolvasása részekben
SQLGetData változó hosszúságú adatokat tartalmazó oszlop adatainak lekérésére használható, azaz ha az oszlop SQL-adattípusának azonosítója SQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHAR, SQL_WCHAR, SQL_WVARCHAR, SQL_WLONGVARCHAR, SQL_BINARY, SQL_VARBINARY, SQL_LONGVARBINARY vagy egy változó hosszúságú típus illesztőprogram-specifikus azonosítója.
Ha részekben szeretne adatokat lekérni egy oszlopból, az alkalmazás többször is meghívja SQLGetData ugyanazon oszlop egymás után. Minden hívásnál SQLGetData az adatok következő részét adja vissza. Az alkalmazás feladata, hogy újra összeszerelje a részeket, ügyelve arra, hogy a null-végpont karaktert eltávolítsa a karakteradatok köztes részeiből. Ha több adatot szeretne visszaadni, vagy nem volt elegendő puffer lefoglalva a megszüntető karakterhez, SQLGetData SQL_SUCCESS_WITH_INFO és SQLSTATE 01004 (Csonkolt adatok) értéket ad vissza. Amikor az adatok utolsó részét adja vissza, SQLGetData SQL_SUCCESS ad vissza. Sem SQL_NO_TOTAL, sem nullát nem lehet visszaadni az utolsó érvényes hívásnál, amely adatokat kér le egy oszlopból, mivel az alkalmazásnak ezután nem tudná, hogy az alkalmazáspufferben lévő adatok mekkora része érvényes. Ha ezt követően SQLGetData hív meg, SQL_NO_DATA ad vissza. További információ: "Adatok lekérése AZ SQLGetData használatával".
A változó hosszúságú könyvjelzők részben visszaadhatók az SQLGetData
SQLGetData nem használható rögzített hosszúságú adatok visszaadására részekben. Ha SQLGetData egy rögzített hosszúságú adatokat tartalmazó oszlop sorában többször is meghívják, akkor az első utáni összes híváshoz SQL_NO_DATA ad vissza.
Streamelt kimeneti paraméterek beolvasása
Ha egy illesztőprogram támogatja a streamelt kimeneti paramétereket, az alkalmazások többször meghívhatják SQLGetData egy kis pufferrel, hogy nagy paraméterértéket kérjenek le. További információ a streamelt kimeneti paraméterről: Kimeneti paraméterek lekérése SQLGetDatahasználatával.
Adatok beolvasása az SQLGetData használatával
A megadott oszlop adatainak visszaadásához SQLGetData a következő lépések sorozatát hajtja végre:
Visszaadja SQL_NO_DATA, ha már visszaadta az oszlop összes adatát.
Beállítja a *StrLen_or_IndPtr SQL_NULL_DATA, ha az adatok NULL értékűek. Ha az adatok NULL értékűek, és StrLen_or_IndPtr null mutató volt, SQLGetData az SQLSTATE 22002 értéket adja vissza (a mutatóváltozó kötelező, de nincs megadva).
Ha az oszlop adatai nem NULL értékűek, SQLGetData a 3. lépésre lép.
Ha a SQL_ATTR_MAX_LENGTH utasítás attribútuma nemero értékű, ha az oszlop karakter- vagy bináris adatokat tartalmaz, és ha SQLGetData korábban nem volt meghívva az oszlophoz, az adatok csonkulnak SQL_ATTR_MAX_LENGTH bájtra.
Jegyzet
A SQL_ATTR_MAX_LENGTH utasítás attribútum célja a hálózati forgalom csökkentése. Általában az adatforrás implementálja, amely csonkolja az adatokat, mielőtt a hálózaton keresztül visszaadja azokat. Az illesztőprogramok és adatforrások nem szükségesek a támogatásához. Ezért annak biztosítása érdekében, hogy az adatok csonkoljanak egy adott méretre, az alkalmazásnak ki kell foglalnia egy ilyen méretű puffert, és meg kell adnia a méretet a BufferLength argumentumban.
Átalakítja az adatokat a TargetType. Az adatok az adott adattípus alapértelmezett pontosságát és skálázását kapják. Ha TargetType SQL_ARD_TYPE, a rendszer az ARD SQL_DESC_CONCISE_TYPE mezőjében szereplő adattípust használja. Ha TargetType SQL_ARD_TYPE, az adatok pontosságot és skálázást kapnak az ARD SQL_DESC_DATETIME_INTERVAL_PRECISION, SQL_DESC_PRECISION és SQL_DESC_SCALE mezőiben a SQL_DESC_CONCISE_TYPE mező adattípusától függően. Ha bármilyen alapértelmezett pontosság vagy skálázás nem megfelelő, az alkalmazásnak explicit módon be kell állítania a megfelelő leíró mezőt az SQLSetDescField vagy SQLSetDescRechívásával.
Ha az adatokat változó hosszúságú adattípussá konvertálták( például karakter vagy bináris), SQLGetData ellenőrzi, hogy az adatok hossza meghaladja-e BufferLength. Ha a karakteradatok hossza (beleértve a null-végződésű karaktert is) meghaladja BufferLength, SQLGetData csonkolja az adatokat BufferLength a nullmegszüntetési karakter hosszával. Ezután null értékűre bontja az adatokat. Ha a bináris adatok hossza meghaladja az adatpuffer hosszát, SQLGetData csonkolja BufferLength bájtra.
Ha a megadott adatpuffer túl kicsi a null-végpont karakter tárolásához, SQLGetData SQL_SUCCESS_WITH_INFO és SQLSTATE 01004 értéket ad vissza.
SQLGetData soha nem csonkolja a rögzített hosszúságú adattípusokká konvertált adatokat; mindig feltételezi, hogy a *TargetValuePtr hossza az adattípus mérete.
A konvertált (és esetleg csonkolt) adatokat a *TargetValuePtr. Vegye figyelembe, hogy SQLGetData nem tud adatokat visszaadni a sorból.
Az adatok hosszát *StrLen_or_IndPtr. Ha StrLen_or_IndPtr null mutató volt, SQLGetData nem adja vissza a hosszt.
Karakter- vagy bináris adatok esetében ez az adatok hossza az átalakítás után és az BufferLengthmiatt történő csonkolás előtt. Ha az illesztő nem tudja meghatározni az adatok hosszát az átalakítás után, ahogyan az a hosszú adatok esetében is előfordul, SQL_SUCCESS_WITH_INFO ad vissza, és SQL_NO_TOTAL értékre állítja a hosszt. (Az SQLGetData
utolsó hívásának mindig az adatok hosszát kell visszaadnia, nem nullát vagy SQL_NO_TOTAL.) Ha az adatokat a SQL_ATTR_MAX_LENGTH utasítás attribútuma miatt csonkították, az attribútum értéke – szemben a tényleges hosszsal – * StrLen_or_IndPtr . Ennek az az oka, hogy ez az attribútum úgy van kialakítva, hogy az átalakítás előtt csonkítsa az adatokat a kiszolgálón, így az illesztőnek nincs módja annak megállapítására, hogy mi a tényleges hossz. Ha SQLGetData egymás után többször is meghívják ugyanahhoz az oszlophoz, ez az aktuális hívás elején elérhető adatok hossza; vagyis a hossz minden további hívással csökken.Az összes többi adattípus esetében ez az adatok hossza az átalakítás után; vagyis annak a típusnak a mérete, amelyre az adatokat konvertálták.
Ha az adatokat csonkolja anélkül, hogy az átalakítás során elveszítenél a pontosságot (például az 1.234-es valós szám csonkolva lesz az 1 egész számra konvertálva), vagy mert BufferLength túl kicsi (például az "abcdef" sztring egy 4 bájtos pufferbe kerül), SQLGetData az SQLSTATE 01004 (Csonkolt adatok) és SQL_SUCCESS_WITH_INFO ad vissza. Ha a SQL_ATTR_MAX_LENGTH utasítás attribútuma miatt az adatok csonkítás nélkül csonkulnak, SQLGetData SQL_SUCCESS ad vissza, és nem adja vissza az SQLSTATE 01004 (Csonkolt adatok) értéket.
A kötött adatpuffer tartalma (ha SQLGetData egy kötött oszlopon van meghívva), és a hossz/mutató puffer nincs meghatározva, ha SQLGetData nem ad vissza SQL_SUCCESS vagy SQL_SUCCESS_WITH_INFO.
Az SQLGetData
SQLGetData(icol=n), SQLGetData(icol=m), SQLGetData(icol=n)
az SQLGetData(icol=n) második hívása az n oszlop kezdetétől kéri le az adatokat. Az adatokban az SQLGetData
Leírók és SQLGetData
SQLGetData nem használ közvetlenül leíró mezőket.
Ha TargetType SQL_ARD_TYPE, a rendszer az ARD SQL_DESC_CONCISE_TYPE mezőjében szereplő adattípust használja. Ha TargetType SQL_ARD_TYPE vagy SQL_C_DEFAULT, az adatok pontosságot és skálázást kapnak az ARD SQL_DESC_DATETIME_INTERVAL_PRECISION, SQL_DESC_PRECISION és SQL_DESC_SCALE mezőiben a SQL_DESC_CONCISE_TYPE mező adattípusától függően.
Példa kódra
Az alábbi példában egy alkalmazás végrehajt egy SELECT utasítást az ügyfélazonosítók, nevek és telefonszámok eredményhalmazának visszaadásához név, azonosító és telefonszám szerint rendezve. Minden adatsorhoz meghívja SQLFetch, hogy a kurzort a következő sorba helyezze. Meghívja
#define NAME_LEN 50
#define PHONE_LEN 50
SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN];
SQLINTEGER sCustID, cbName, cbAge, cbBirthday;
SQLRETURN retcode;
SQLHSTMT hstmt;
retcode = SQLExecDirect(hstmt,
"SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3",
SQL_NTS);
if (retcode == SQL_SUCCESS) {
while (TRUE) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
show_error();
}
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
/* Get data for columns 1, 2, and 3 */
SQLGetData(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID);
SQLGetData(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName);
SQLGetData(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN,
&cbPhone);
/* Print the row of data */
fprintf(out, "%-5d %-*s %*s", sCustID, NAME_LEN-1, szName,
PHONE_LEN-1, szPhone);
} else {
break;
}
}
}
Kapcsolódó függvények
| További információ: | Lát |
|---|---|
| Tároló hozzárendelése egy oszlophoz egy eredményhalmazban | SQLBindCol |
| Olyan tömeges műveletek végrehajtása, amelyek nem kapcsolódnak a blokkkurzor pozíciójához | SQLBulkOperations |
| Utasításfeldolgozás megszakítása | SQLCancel |
| SQL-utasítás végrehajtása | SQLExecDirect |
| Előkészített SQL-utasítás végrehajtása | SQLExecute |
| Adatblokk beolvasása vagy egy eredményhalmaz görgetése | SQLFetchScroll |
| Egyetlen adatsor vagy adatblokk beolvasása csak előre irányban | SQLFetch |
| Paraméteradatok küldése végrehajtási időpontban | SQLPutData |
| A kurzor elhelyezése, adatok frissítése a sorhalmazban, vagy adatok frissítése vagy törlése a sorhalmazban | SQLSetPos |
Lásd még:
ODBC API-referencia
ODBC-fejlécfájlok
Kimeneti paraméterek lekérése SQLGetData használatával