Megosztás a következőn keresztül:


SQLColAttribute függvény

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 Unicode-sztring (SQLColAttributeWmeghívásakor), akkor a BufferLength argumentumnak páros számnak kell lennie. Ha FieldIdentifier egy illesztőprogram által definiált mező, az alkalmazás a mező jellegét az Illesztőprogram-kezelőre jelzi a BufferLength argumentum beállításával. BufferLength a következő értékekkel rendelkezhet:

  • 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.

SQLColAttribute az SQLDescribeColbővíthető alternatíva. SQLDescribeCol az ANSI-89 SQL-en alapuló rögzített leíró információkat ad vissza. SQLColAttribute lehetővé teszi az ANSI SQL-92 és DBMS szállítói bővítményekben elérhető leíró információk szélesebb körű készletének elérését.

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