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 3.0 szabványmegfelelőség: ISO 92
összefoglaló
SQLColAttribute egy eredményhalmaz egy oszlopának leíró adatait adja vissza. A leíró adatok karaktersztringként, leírótól függő értékként vagy egész számként lesznek visszaadva.
Jegyzet
További információ arról, hogy a Driver Manager hogyan képezi le ezt a függvényt odBC 3 esetén.x alkalmazás egy ODBC 2-vel működik.x illesztőt az alkalmazások visszamenőleges kompatibilitását Helyettesítő függvények leképezésecímű témakörben talál.
Szintaxis
SQLRETURN SQLColAttribute (
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLUSMALLINT FieldIdentifier,
SQLPOINTER CharacterAttributePtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr,
SQLLEN * NumericAttributePtr);
Érvek
StatementHandle
[Bemenet] Utasításkezelő.
ColumnNumber
[Bemenet] Annak a rekordnak a száma az IRD-ben, amelyből a mező értékét le kell kérni. Ez az argumentum az eredményadatok oszlopszámának felel meg, sorrendbe rendezve egymás után növekvő oszlopsorrendben, 1-től kezdve. Az oszlopok bármilyen sorrendben leírhatók.
Ebben az argumentumban a 0 oszlop adható meg, de a SQL_DESC_TYPE és SQL_DESC_OCTET_LENGTH kivételével minden érték nem definiált értékeket ad vissza.
FieldIdentifier
[Bemenet] A leíró fogópont. Ez a leíró határozza meg, hogy az IRD melyik mezőjét kell lekérdezni (például SQL_COLUMN_TABLE_NAME).
CharacterAttributePtr
[Kimenet] Mutasson egy pufferre, amelyben az IRD ColumnNumber sorának FieldIdentifier mezőjében szereplő értéket adja vissza, ha a mező karaktersztring. Ellenkező esetben a mező nincs használatban.
Ha CharacterAttributePtr NULL értékű, StringLengthPtr továbbra is visszaadja a CharacterAttributePtráltal mutatott pufferben elérhető bájtok teljes számát (a karakteradatok null-végpont karakterének kivételével).
BufferLength
[Bemenet] Ha FieldIdentifier ODBC által definiált mező, és CharacterAttributePtr karaktersztringre vagy bináris pufferre mutat, ennek az argumentumnak *CharacterAttributePtrhossza kell lennie. Ha FieldIdentifier ODBC által definiált mező, és *CharacterAttributePtr egész szám, a mező figyelmen kívül lesz hagyva. Ha a *CharacterAttributePtr
Ha CharacterAttributePtr mutató, BufferLength értéke SQL_IS_POINTER.
Ha CharacterAttributePtr egy karaktersztringre mutató mutató, akkor a BufferLength a puffer hossza.
Ha CharacterAttributePtr egy bináris pufferre mutató mutató, az alkalmazás a SQL_LEN_BINARY_ATTR (hossz) makró eredményét helyezi el BufferLength. Ez negatív értéket helyez el BufferLength.
Ha CharacterAttributePtr rögzített hosszúságú adattípusra mutat, BufferLength a következők egyikének kell lennie: SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT vagy SQL_IS_USMALLINT.
StringLengthPtr
[Kimenet] Mutasson arra a pufferre, amelyben a *CharacterAttributePtrfüggvényben elérhető bájtok teljes számát adja vissza (a karakteradatok null-végponti bájtját kivéve).
Karakteradatok esetén, ha a visszaadható bájtok száma nagyobb vagy egyenlő, mint BufferLength, a *CharacterAttributePtr leíró adatai csonkolva lesznek BufferLength a null-végződésű karakter hosszával, és az illesztő null értékűen végződik.
Minden más adattípus esetében a rendszer figyelmen kívül hagyja a BufferLength értékét, és az illesztő feltételezi, hogy a *CharacterAttributePtr mérete 32 bit.
NumericAttributePtr
[Kimenet] Mutasson egy egész számpufferre, amelyben az IRD ColumnNumber sorának FieldIdentifier mezőjében szereplő értéket adja vissza, ha a mező numerikus leíró típusú, például SQL_DESC_COLUMN_LENGTH. Ellenkező esetben a mező nincs használatban. Vegye figyelembe, hogy egyes illesztőprogramok csak az alsó 32 bites vagy 16 bites puffert írhatják, és a magasabb rendű bitet változatlanul hagyhatják. Ezért a függvény meghívása előtt az alkalmazásoknak 0-ra kell inicializálnia az értéket.
Visszatér
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnosztika
Ha SQLColAttribute SQL_ERROR vagy SQL_SUCCESS_WITH_INFO ad vissza, a társított SQLSTATE-érték a SQLGetDiagRec meghívásával SQL_HANDLE_STMT HandleType és HandleStatementHandlehívható meg. Az alábbi táblázat felsorolja a SQLColAttribute á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 puffer *CharacterAttributePtr nem volt elég nagy a teljes sztringérték visszaadásához, ezért a sztring értéke csonkolva lett. A nem csonkolt sztringérték hossza *StringLengthPtr. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 07005 | Az előkészített utasítás nem kurzor-specifikációs | A StatementHandle társított utasítás nem adott eredményhalmazt, és FieldIdentifier nem SQL_DESC_COUNT. Nem voltak ismertetendő oszlopok. |
| 07009 | Érvénytelen leíró index | (DM) Az ColumnNumber értéke 0, az SQL_ATTR_USE_BOOKMARKS utasítás attribútum pedig SQL_UB_OFF. A ColumnNumber argumentumhoz megadott érték nagyobb volt, mint az eredményhalmaz oszlopainak száma. |
| 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 diagnosztikai adatstruktúra SQLGetDiagField által 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 | Művelet megszakítva | Az aszinkron feldolgozás engedélyezve lett 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. Ezután a függvényt ismét meghívta 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álról egy többszálas alkalmazásból. |
| HY010 | Függvényütemezési hiba | (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 az SQLColAttribute meghívásakor lett végrehajtva. (DM) SQLExecute, SQLExecDirectvagy SQLMoreResults meghívást kapott a StatementHandle, és visszaadta SQL_PARAM_DATA_AVAILABLE. Ez a függvény az összes streamelt paraméter adatainak lekérése előtt lett meghívva. (DM) A függvény meghívása SQLPrepare, SQLExecDirectvagy a StatementHandlekatalógusfüggvényének meghívása előtt történt. (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. |
| 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) *CharacterAttributePtr karaktersztring, és BufferLength kisebb, mint 0, de nem egyenlő SQL_NTS. |
| HY091 | Érvénytelen leíró mezőazonosító | A FieldIdentifier argumentumhoz megadott érték nem a definiált értékek egyike, és nem implementálás által definiált érték volt. |
| 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 | Az illesztőprogram nem alkalmas | A FieldIdentifier argumentumhoz megadott értéket az illesztő nem támogatta. |
| 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 illesztőprogramja 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. |
Ha SQLPrepare után és SQLExecuteelőtt hívja meg, SQLColAttribute bármilyen SQLSTATE-t visszaadhat, amelyet SQLPrepare vagy SQLExecuteadhat vissza attól függően, hogy az adatforrás mikor értékeli ki a StatementHandletársított SQL-utasítást.
Teljesítménybeli okokból az alkalmazás nem hívhatja meg SQLColAttribute utasítás végrehajtása előtt.
Megjegyzések
Arról, hogy az alkalmazások hogyan használják az SQLColAttributeáltal visszaadott információkat, tekintse meg eredményhalmaz metaadatainakcímű témakört.
SQLColAttribute a *NumericAttributePtr vagy a *CharacterAttributePtr. Az egész számadatokat a *NumericAttributePtr adja vissza SQLLEN-értékként; az összes többi információformátumot a *CharacterAttributePtradja vissza. Ha az adatok a *NumericAttributePtrfüggvényben lesznek visszaadva, az illesztő figyelmen kívül hagyja CharacterAttributePtr, BufferLengthés StringLengthPtr. Ha az adatok a *CharacterAttributePtrértékre kerülnek vissza, az illesztő figyelmen kívül hagyja NumericAttributePtr.
SQLColAttribute az IRD leíró mezőiből ad vissza értékeket. A függvényt leíró fogópont helyett utasításfogóponttal hívjuk meg. Az SQLColAttribute által visszaadott értékek az ebben a szakaszban felsorolt FieldIdentifier értékekhez is lekérhetők úgy, hogy meghívják SQLGetDescField a megfelelő IRD-leíróval.
A jelenleg definiált leíró mezőket, az ODBC azon verzióját, amelyben bevezették őket, és azokat az argumentumokat, amelyekben az adatok vissza lesznek adva, a szakasz későbbi részében jelennek meg; az illesztőprogramok több leírótípust is meghatározhatnak a különböző adatforrások előnyeinek kihasználásához.
Egy ODBC 3.x illesztőnek minden leíró mezőhöz értéket kell visszaadnia. Ha egy leíró mező nem vonatkozik az illesztőprogramra vagy az adatforrásra, és ellenkező rendelkezés hiányában az illesztő 0 értéket ad vissza *StringLengthPtr vagy egy üres sztringet *CharacterAttributePtr.
Visszamenőleges kompatibilitás
Az ODBC 3.x függvény SQLColAttribute lecseréli az elavult ODBC 2-t.x függvény SQLColAttributes. Ha SQLColAttributesSQLColAttribute (amikor egy ODBC 2.x alkalmazás egy ODBC 3-mal dolgozik.x illesztő) vagy SQLColAttributeSQLColAttributes (ha egy ODBC 3.x alkalmazás egy ODBC 2.x illesztővel dolgozik), az illesztőprogram-kezelő vagy átadja FieldIdentifier értékét, leképezi egy új értékre, vagy hibát ad vissza az alábbiak szerint:
Jegyzet
Az FieldIdentifier előtagja ODBC 3 értékeit.x megváltozott az ODBC 2-ben használttól.x. Az új előtag a "SQL_DESC"; a régi előtag a "SQL_COLUMN" volt.
Ha az ODBC 2 #define értéke.xFieldIdentifier megegyezik az ODBC 3 #define értékével.xFieldIdentifier, a függvényhívásban szereplő érték csak át lesz adva.
Az ODBC 2 #define értékei.xFieldIdentifiers SQL_COLUMN_LENGTH, SQL_COLUMN_PRECISION és SQL_COLUMN_SCALE eltérnek az ODBC 3 #define értékeitől.xFieldIdentifiers SQL_DESC_PRECISION, SQL_DESC_SCALE és SQL_DESC_LENGTH. Egy ODBC 2.x illesztőprogramnak csak az ODBC 2-t kell támogatnia.x értékeket. Egy ODBC 3.x illesztőnek támogatnia kell a "SQL_COLUMN" és a "SQL_DESC" értéket e három FieldIdentifiers. Ezek az értékek azért különböznek, mert a pontosság, a skálázás és a hossz eltérően van definiálva az ODBC 3-ban.x, mint az ODBC 2-ben.x. További információ: Oszlopméret, Tizedesjegyek, Átviteli oktett hossza és Megjelenítési méret.
Ha az ODBC 2 #define értéke.xFieldIdentifier eltér az ODBC 3 #define értékétől.xFieldIdentifiera DARAB, a NÉV és a NULL ÉRTÉKŰ értékek esetén a függvényhívásban szereplő érték megfeleltethető a megfelelő értéknek. A SQL_COLUMN_COUNT például SQL_DESC_COUNT, SQL_DESC_COUNT pedig a leképezés irányától függően SQL_COLUMN_COUNT van leképezve.
Ha
FieldIdentifier az ODBC 3 új értéke.x , amelynek nem volt megfelelő értéke az ODBC 2-ben.x , az ODBC 3 esetén nem lesz leképezve.x alkalmazás az SQLColAttribute ODBC 2-ben valóhívásában használja. x illesztőprogramot, és a hívás az SQLSTATE HY091 (Érvénytelen leíró mezőazonosító) értéket adja vissza.
Az alábbi táblázat a SQLColAttributeáltal visszaadott leírótípusokat sorolja fel. Az NumericAttributePtr értékek típusa SQLLEN *.
| FieldIdentifier | Információ visszaadott |
Leírás |
|---|---|---|
| SQL_DESC_AUTO_UNIQUE_VALUE (ODBC 1.0) | NumericAttributePtr | SQL_TRUE, ha az oszlop automatikus beírású oszlop. SQL_FALSE, ha az oszlop nem automatikus beírású oszlop, vagy nem numerikus. Ez a mező csak numerikus adattípusú oszlopokra érvényes. Az alkalmazások beszúrhatnak értékeket egy automatikus beírási oszlopot tartalmazó sorba, de általában nem tudják frissíteni az oszlop értékeit. Ha egy beszúrás automatikus beírási oszlopba történik, a beszúráskor egy egyedi érték lesz beszúrva az oszlopba. A növekmény nincs definiálva, de adatforrás-specifikus. Az alkalmazás nem feltételezheti, hogy egy automatikus beírási oszlop egy adott ponton indul el, vagy egy adott érték alapján növekszik. |
| SQL_DESC_BASE_COLUMN_NAME (ODBC 3.0) | CharacterAttributePtr | Az eredményhalmaz oszlopának alaposzlopneve. Ha az alaposzlop neve nem létezik (mint a kifejezéseket tartalmazó oszlopok esetében), akkor ez a változó egy üres sztringet tartalmaz. Ezt az információt az IRD SQL_DESC_BASE_COLUMN_NAME rekordmezője adja vissza, amely írásvédett mező. |
| SQL_DESC_BASE_TABLE_NAME (ODBC 3.0) | CharacterAttributePtr | Az oszlopot tartalmazó alaptábla neve. Ha az alaptábla neve nem definiálható vagy nem alkalmazható, akkor ez a változó üres sztringet tartalmaz. Ezt az információt az IRD SQL_DESC_BASE_TABLE_NAME rekordmezője adja vissza, amely egy írásvédett mező. |
| SQL_DESC_CASE_SENSITIVE (ODBC 1.0) | NumericAttributePtr | SQL_TRUE, ha az oszlop rendezések és összehasonlítások szempontjából megkülönbözteti a kis- és nagybetűket. SQL_FALSE, ha az oszlopot nem kezelik kis- és nagybetűk megkülönböztetésével a rendezések és az összehasonlítások szempontjából, vagy nem számítónak. |
| SQL_DESC_CATALOG_NAME (ODBC 2.0) | CharacterAttributePtr | Az oszlopot tartalmazó tábla katalógusa. A visszaadott érték implementációban van definiálva, ha az oszlop kifejezés, vagy ha az oszlop egy nézet része. Ha az adatforrás nem támogatja a katalógusokat, vagy a katalógus neve nem határozható meg, a rendszer üres sztringet ad vissza. Ez a VARCHAR rekordmező nem korlátozódik 128 karakterre. |
| SQL_DESC_CONCISE_TYPE (ODBC 1.0) | NumericAttributePtr | A tömör adattípus. A datetime és az intervallum típusú adattípusok esetében ez a mező a tömör adattípust adja vissza; például SQL_TYPE_TIME vagy SQL_INTERVAL_YEAR. (További információ: Adattípus-azonosítók és -leírók a D. függelék adattípusai között.) Ezt az információt az IRD SQL_DESC_CONCISE_TYPE rekordmezője adja vissza. |
| SQL_DESC_COUNT (ODBC 1.0) | NumericAttributePtr | Az eredményhalmazban elérhető oszlopok száma. Ez 0 értéket ad vissza, ha az eredményhalmazban nincsenek oszlopok. A ColumnNumber argumentum értéke figyelmen kívül lesz hagyva. Ezt az információt az IRD SQL_DESC_COUNT fejlécmezője adja vissza. |
| SQL_DESC_DISPLAY_SIZE (ODBC 1.0) | NumericAttributePtr | Az oszlopból származó adatok megjelenítéséhez szükséges karakterek maximális száma. További információ a megjelenítés méretéről: Oszlopméret, Tizedesjegyek, Az oktett hossza átvitele és a Megjelenítési méret a D függelék adattípusai című szakaszában. |
| SQL_DESC_FIXED_PREC_SCALE (ODBC 1.0) | NumericAttributePtr | SQL_TRUE, ha az oszlop rögzített pontosságú és nem adatméretű, amely adatforrás-specifikus. SQL_FALSE, ha az oszlop nem rendelkezik rögzített pontosságú és nem adatforrás-skálával, amely adatforrás-specifikus. |
| SQL_DESC_LABEL (ODBC 2.0) | CharacterAttributePtr | Az oszlopfelirat vagy -cím. Előfordulhat például, hogy egy EmpName nevű oszlop neve alkalmazott neve, vagy aliassal van megjelölve. Ha egy oszlop nem rendelkezik címkével, a függvény visszaadja az oszlop nevét. Ha az oszlop címkézetlen és névtelen, a rendszer üres sztringet ad vissza. |
| SQL_DESC_LENGTH (ODBC 3.0) | NumericAttributePtr | Numerikus érték, amely egy karaktersztring vagy bináris adattípus maximális vagy tényleges karakterhossza. Ez egy rögzített hosszúságú adattípus maximális karakterhossza, vagy egy változó hosszúságú adattípus tényleges karakterhossza. Az értéke mindig kizárja a karaktersztringet lezáró null-végződési bájtot. Ezt az információt az IRD SQL_DESC_LENGTH rekordmezője adja vissza. A hosszúságról további információt az oszlopméret, tizedesjegyek, az oktetthossz átvitele és a megjelenítési méret A D függelék adattípusai című szakaszában talál. |
| SQL_DESC_LITERAL_PREFIX (ODBC 3.0) | CharacterAttributePtr | Ez a VARCHAR(128) rekordmező tartalmazza azokat a karaktereket vagy karaktereket, amelyeket az illesztőprogram az ilyen típusú literál előtagjaként ismer fel. Ez a mező egy üres sztringet tartalmaz egy olyan adattípushoz, amelyhez nem alkalmazható konstans előtag. További információ: Konstans előtagok és utótagok. |
| SQL_DESC_LITERAL_SUFFIX (ODBC 3.0) | CharacterAttributePtr | Ez a VARCHAR(128) rekordmező tartalmazza azokat a karaktereket vagy karaktereket, amelyeket az illesztőprogram utótagként ismer fel az ilyen típusú literálokhoz. Ez a mező egy üres sztringet tartalmaz egy olyan adattípushoz, amelyhez nem alkalmazható literális utótag. További információ: Konstans előtagok és utótagok. |
| SQL_DESC_LOCAL_TYPE_NAME (ODBC 3.0) | CharacterAttributePtr | Ez a VARCHAR(128) rekordmező az adattípus bármely honosított (anyanyelvi) nevét tartalmazza, amely eltérhet az adattípus normál nevétől. Ha nincs honosított név, a rendszer egy üres sztringet ad vissza. Ez a mező csak megjelenítési célokat szolgál. A sztring karakterkészlete területi beállítástól függ, és általában a kiszolgáló alapértelmezett karakterkészlete. |
| SQL_DESC_NAME (ODBC 3.0) | CharacterAttributePtr | Az oszlop aliasa, ha az érvényes. Ha az oszlop aliasa nem érvényes, a függvény visszaadja az oszlop nevét. A SQL_DESC_UNNAMED mindkét esetben SQL_NAMED értékre van állítva. Ha nincs oszlopnév vagy oszlop alias, a rendszer üres sztringet ad vissza, és SQL_DESC_UNNAMED SQL_UNNAMED értékre van állítva. Ezt az információt az IRD SQL_DESC_NAME rekordmezője adja vissza. |
| SQL_DESC_NULLABLE (ODBC 3.0) | NumericAttributePtr | SQL_ NULL ÉRTÉKŰ, ha az oszlop null értékű lehet; SQL_NO_NULLS, ha az oszlop nem tartalmaz NULL értékeket; vagy SQL_NULLABLE_UNKNOWN, ha nem ismert, hogy az oszlop elfogadja-e a NULL értékeket. Ezt az információt az IRD SQL_DESC_NULLABLE rekordmezője adja vissza. |
| SQL_DESC_NUM_PREC_RADIX (ODBC 3.0) | NumericAttributePtr | Ha a SQL_DESC_TYPE mező adattípusa hozzávetőleges numerikus adattípus, akkor ez az SQLINTEGER mező 2 értéket tartalmaz, mert a SQL_DESC_PRECISION mező a bitek számát tartalmazza. Ha a SQL_DESC_TYPE mező adattípusa pontos numerikus adattípus, akkor ez a mező 10 értéket tartalmaz, mert a SQL_DESC_PRECISION mező a tizedesjegyek számát tartalmazza. Ez a mező az összes nem numerikus adattípus esetében 0 értékre van állítva. |
| SQL_DESC_OCTET_LENGTH (ODBC 3.0) | NumericAttributePtr | Karaktersztring vagy bináris adattípus bájtban kifejezett hossza. Rögzített hosszúságú karakter vagy bináris típus esetén ez a tényleges hossz bájtban. Változó hosszúságú karakter vagy bináris típus esetén ez a bájtok maximális hossza. Ez az érték nem tartalmazza a null terminátort. Ezt az információt az IRD SQL_DESC_OCTET_LENGTH rekordmezője adja vissza. A hosszúságról további információt az oszlopméret, tizedesjegyek, az oktetthossz átvitele és a megjelenítési méret A D függelék adattípusai című szakaszában talál. |
| SQL_DESC_PRECISION (ODBC 3.0) | NumericAttributePtr | Numerikus érték, amely egy numerikus adattípus esetében az alkalmazható pontosságot jelöli. Az adattípusok SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP és az időintervallumot képviselő összes intervallumadattípus esetében az érték a tört másodperc összetevő alkalmazható pontossága. Ezt az információt az IRD SQL_DESC_PRECISION rekordmezője adja vissza. |
| SQL_DESC_SCALE (ODBC 3.0) | NumericAttributePtr | Numerikus érték, amely egy numerikus adattípus alkalmazható skálája. DECIMÁLIS és NUMERIKUS adattípusok esetén ez a definiált skálázás. Nincs definiálva az összes többi adattípushoz. Ezt az információt az IRD SCALE rekordmezője adja vissza. |
| SQL_DESC_SCHEMA_NAME (ODBC 2.0) | CharacterAttributePtr | Az oszlopot tartalmazó tábla sémája. A visszaadott érték implementációban van definiálva, ha az oszlop kifejezés, vagy ha az oszlop egy nézet része. Ha az adatforrás nem támogatja a sémákat, vagy a séma neve nem határozható meg, a rendszer üres sztringet ad vissza. Ez a VARCHAR rekordmező nem korlátozódik 128 karakterre. |
| SQL_DESC_SEARCHABLE (ODBC 1.0) | NumericAttributePtr | SQL_PRED_NONE, hogy az oszlop nem használható-e WHERE záradékban. (Ez megegyezik az ODBC 2.xSQL_UNSEARCHABLE értékével.) SQL_PRED_CHAR, hogy az oszlop használható-e WHERE záradékban, de csak a LIKE predikátummal. (Ez megegyezik az ODBC 2.xSQL_LIKE_ONLY értékével.) SQL_PRED_BASIC, hogy az oszlop használható-e a WHERE záradékban a LIKE kivételével az összes összehasonlító operátorral. (Ez megegyezik az ODBC 2.xSQL_EXCEPT_LIKE értékével.) SQL_PRED_SEARCHABLE, hogy az oszlop használható-e a WHERE záradékban bármely összehasonlító operátorral. A SQL_LONGVARCHAR és SQL_LONGVARBINARY típusú oszlopok általában SQL_PRED_CHAR adnak vissza. |
| SQL_DESC_TABLE_NAME (ODBC 2.0) | CharacterAttributePtr | Az oszlopot tartalmazó tábla neve. A visszaadott érték implementációban van definiálva, ha az oszlop kifejezés, vagy ha az oszlop egy nézet része. Ha a tábla neve nem határozható meg, a rendszer üres sztringet ad vissza. |
| SQL_DESC_TYPE (ODBC 3.0) | NumericAttributePtr | Az SQL-adattípust meghatározó numerikus érték. Ha ColumnNumber értéke 0, a változó hosszúságú könyvjelzők SQL_BINARY, a rögzített hosszúságú könyvjelzők esetében pedig SQL_INTEGER lesz visszaadva. A datetime és intervallum típusú adattípusok esetében ez a mező a részletes adattípust adja vissza: SQL_DATETIME vagy SQL_INTERVAL. (További információ: adattípus-azonosítók és -leírók a D függelék adattípusai című témakörében. Ezt az információt az IRD SQL_DESC_TYPE rekordmezője adja vissza. Megjegyzés: Az ODBC 2 elleni munka.x illesztőprogramok helyett használja a SQL_DESC_CONCISE_TYPE. |
| SQL_DESC_TYPE_NAME (ODBC 1.0) | CharacterAttributePtr | Adatforrástól függő adattípus neve; például: "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY", vagy "CHAR ( ) FOR BIT DATA". Ha a típus ismeretlen, a rendszer üres sztringet ad vissza. |
| SQL_DESC_UNNAMED (ODBC 3.0) | NumericAttributePtr | SQL_NAMED vagy SQL_UNNAMED. Ha az IRD SQL_DESC_NAME mezője oszlop aliast vagy oszlopnevet tartalmaz, SQL_NAMED lesz visszaadva. Ha nincs oszlopnév vagy oszlop alias, SQL_UNNAMED lesz visszaadva. Ezt az információt az IRD SQL_DESC_UNNAMED rekordmezője adja vissza. |
| SQL_DESC_UNSIGNED (ODBC 1.0) | NumericAttributePtr | SQL_TRUE, ha az oszlop nincs aláírva (vagy nem numerikus). SQL_FALSE, ha az oszlop aláírt. |
| SQL_DESC_UPDATABLE (ODBC 1.0) | NumericAttributePtr | Az oszlopot a definiált állandók értékei írják le: SQL_ATTR_READONLY SQL_ATTR_WRITE SQL_ATTR_READWRITE_UNKNOWN SQL_DESC_UPDATABLE az eredményhalmaz oszlopának frissíthetőségét írja le, nem az alaptábla oszlopát. Az eredményhalmaz oszlop alapjául szolgáló alaposzlop frissíthetősége eltérhet a mező értékétől. Az oszlop frissíthető-e az adattípus, a felhasználói jogosultságok és az eredményhalmaz definíciója alapján. Ha nem világos, hogy egy oszlop frissíthető-e, SQL_ATTR_READWRITE_UNKNOWN kell visszaadni. |
Kapcsolódó függvények
| További információ: | Lát |
|---|---|
| Puffer kötése egy eredményhalmaz oszlopához | SQLBindCol függvény |
| Utasításfeldolgozás megszakítása | SQLCancel-függvény |
| Eredményhalmaz oszlopával kapcsolatos információk visszaadása | SQLDescribeCol függvény |
| Adatblokk beolvasása vagy egy eredményhalmaz görgetése | SQLFetchScroll függvény |
| Több adatsor beolvasása | SQLFetch-függvény |
Példa
Az alábbi mintakód nem szabadít fel leírókat és kapcsolatokat. A SQLFreeHandle függvény, ODBC-mintaprogramés SQLFreeStmt függvény a kódmintákhoz a leírók és utasítások felszabadításához.
// SQLColAttribute.cpp
// compile with: user32.lib odbc32.lib
#define UNICODE
#include <windows.h>
#include <sqlext.h>
#include <strsafe.h>
struct DataBinding {
SQLSMALLINT TargetType;
SQLPOINTER TargetValuePtr;
SQLINTEGER BufferLength;
SQLLEN StrLen_or_Ind;
};
void printStatementResult(SQLHSTMT hstmt) {
int bufferSize = 1024, i;
SQLRETURN retCode;
SQLSMALLINT numColumn = 0, bufferLenUsed;
retCode = SQLNumResultCols(hstmt, &numColumn);
SQLPOINTER* columnLabels = (SQLPOINTER *)malloc( numColumn * sizeof(SQLPOINTER*) );
struct DataBinding* columnData = (struct DataBinding*)malloc( numColumn * sizeof(struct DataBinding) );
printf( "Columns from that table:\n" );
for ( i = 0 ; i < numColumn ; i++ ) {
columnLabels[i] = (SQLPOINTER)malloc( bufferSize*sizeof(char) );
retCode = SQLColAttribute(hstmt, (SQLUSMALLINT)i + 1, SQL_DESC_LABEL, columnLabels[i], (SQLSMALLINT)bufferSize, &bufferLenUsed, NULL);
wprintf( L"Column %d: %s\n", i, (wchar_t*)columnLabels[i] );
}
// allocate memory for the binding
for ( i = 0 ; i < numColumn ; i++ ) {
columnData[i].TargetType = SQL_C_CHAR;
columnData[i].BufferLength = (bufferSize+1);
columnData[i].TargetValuePtr = malloc( sizeof(unsigned char)*columnData[i].BufferLength );
}
// setup the binding
for ( i = 0 ; i < numColumn ; i++ ) {
retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, columnData[i].TargetType,
columnData[i].TargetValuePtr, columnData[i].BufferLength, &(columnData[i].StrLen_or_Ind));
}
printf( "Data from that table:\n" );
// fetch the data and print out the data
for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt) ) {
int j;
for ( j = 0 ; j < numColumn ; j++ )
wprintf( L"%s: %hs\n", columnLabels[j], columnData[j].TargetValuePtr );
printf( "\n" );
}
printf( "\n" );
}
int main() {
int bufferSize = 1024, i, count = 1, numCols = 5;
wchar_t firstTableName[1024], * dbName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize ), * userName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLWCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen, bufferLen;
SQLRETURN retCode;
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
struct DataBinding* catalogResult = (struct DataBinding*) malloc( numCols * sizeof(struct DataBinding) );
SQLWCHAR* selectAllQuery = (SQLWCHAR *)malloc( sizeof(SQLWCHAR) * bufferSize );
// connect to database
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLCHAR *)(void*)SQL_OV_ODBC3, -1);
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
retCode = SQLDriverConnect(hdbc, desktopHandle, L"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// display the database information
retCode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferLen);
retCode = SQLGetInfo(hdbc, SQL_USER_NAME, userName, (SQLSMALLINT)bufferSize, &bufferLen);
for ( i = 0 ; i < numCols ; i++ ) {
catalogResult[i].TargetType = SQL_C_CHAR;
catalogResult[i].BufferLength = (bufferSize + 1);
catalogResult[i].TargetValuePtr = malloc( sizeof(unsigned char)*catalogResult[i].BufferLength );
}
// Set up the binding. This can be used even if the statement is closed by closeStatementHandle
for ( i = 0 ; i < numCols ; i++ )
retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, catalogResult[i].TargetType, catalogResult[i].TargetValuePtr, catalogResult[i].BufferLength, &(catalogResult[i].StrLen_or_Ind));
retCode = SQLTables( hstmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, L"", SQL_NTS, L"", SQL_NTS, L"", SQL_NTS );
retCode = SQLFreeStmt(hstmt, SQL_CLOSE);
retCode = SQLTables( hstmt, dbName, SQL_NTS, userName, SQL_NTS, L"%", SQL_NTS, L"TABLE", SQL_NTS );
for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt), ++count )
if ( count == 1 )
StringCchPrintfW( firstTableName, 1024, L"%hs", catalogResult[2].TargetValuePtr );
retCode = SQLFreeStmt(hstmt, SQL_CLOSE);
wprintf( L"Select all data from the first table (%s)\n", firstTableName );
StringCchPrintfW( selectAllQuery, bufferSize, L"SELECT * FROM %s", firstTableName );
retCode = SQLExecDirect(hstmt, selectAllQuery, SQL_NTS);
printStatementResult(hstmt);
}
Lásd még:
ODBC API-referencia
ODBC-fejlécfájlok
ODBC-mintaprogram