Funkce SQLColumns

Soulad
Představená verze: ODBC 1.0 Soulad standardů: Open Group

Summary
SQLColumns vrací seznam názvů sloupců ve specifikovaných tabulkách. Ovladač vrací tyto informace jako výslednou sadu na specifikovaném CommandHandle.

Syntax

  
SQLRETURN SQLColumns(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      CatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      SchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      TableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      ColumnName,  
     SQLSMALLINT    NameLength4);  

Arguments

StatementHandle
[Vstup] Popisovač příkazu

CatalogName
[Vstup] Název katalogu. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které katalogy nemají. CatalogName nemůže obsahovat vzor vyhledávání řetězců.

Note

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, CatalogName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, CatalogName je běžný argument; Je brána doslovně a její případ je významný. Další informace naleznete v tématu Argumenty funkce katalogu.

NameLength1
[Vstup] Délka znaků *CatalogName.

Název schématu
[Vstup] Vzor vyhledávání řetězců pro názvy schémat. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje ty tabulky, které schémata nemají.

Note

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, SchemaName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, SchemaName je argument hodnoty vzoru; Je brána doslovně a její případ je významný.

NameLength2
[Vstup] Délka znaků *SchemaName.

TableName
[Vstup] Vzor vyhledávání řetězců pro názvy tabulek.

Note

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, TableName je považován za identifikátor a jeho případ není významný. Pokud je SQL_FALSE, TableName je argument vzorové hodnoty; Je brána doslovně a její případ je významný.

NameLength3
[Vstup] Délka znaků *TableName.

ColumnName
[Vstup] Vzor hledání řetězců pro názvy sloupců

Note

Pokud je atribut příkazu SQL_ATTR_METADATA_ID nastaven na SQL_TRUE, ColumnName se považuje za identifikátor a jeho případ není významný. Pokud je SQL_FALSE, název sloupce je argument hodnoty vzoru; je léčen doslova a jeho případ je významný.

NameLength4
[Vstup] Délka znaků *ColumnName.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR nebo SQL_INVALID_HANDLE.

Diagnostika

Když SQLColumns vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLSTATE voláním SQLGetDiagRec pomocí HandleType SQL_HANDLE_STMT a HandleStatementHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLColumns obvykle vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.

SQLSTATE Error Description
01000 Obecné upozornění Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
08S01 Selhání komunikačního propojení Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce.
24000 Neplatný stav kurzoru Na StatementHandle byl otevřený kurzor a byly volány SQLFetch nebo SQLFetchScroll . Tato chyba je vrácena Správcem ovladačů, pokud SQLFetch nebo SQLFetchScroll nevrátil SQL_NO_DATA a ovladač je vrácen, pokud SQLFetch nebo SQLFetchScroll vrátil SQL_NO_DATA.

Kurzor byl otevřený na StatementHandle , ale SQLFetch nebo SQLFetchScroll nebyly volány.
40001 Selhání serializace Transakce byla vrácena zpět kvůli vzájemnému zablokování prostředku s jinou transakcí.
40003 Neznámé dokončování příkazů Přidružené připojení se nezdařilo během provádění této funkce a stav transakce nelze určit.
HY000 Obecná chyba Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu.
HY001 Chyba přidělení paměti Ovladač nemohl přidělit paměť, která je nutná k podpoře provádění nebo dokončování funkce.
HY008 Operace byla zrušena. Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel nebo SQLCancelHandle pro PříkazHandle. Pak byla funkce znovu volána v StatementHandle.

Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny.
HY009 Neplatné použití ukazatele null Atribut SQL_ATTR_METADATA_ID příkazu byl nastaven na SQL_TRUE, argument CatalogName byl nulový ukazatel a SQL_CATALOG_NAME InfoType vrací, že jsou podporována jména katalogů.

(DM) Atribut SQL_ATTR_METADATA_ID byl nastaven na SQL_TRUE a argumenty SchemaName, TableName nebo ColumnName byly nulovým ukazatelem.
HY010 Chyba posloupnosti funkcí (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato asynchronní funkce se stále vykonávala, když byla volána funkce SQLColumns .

(DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volána pro StatementHandle a vrácena SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry.

(DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vráceny SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce.
HY013 Chyba správy paměti Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti.
HY090 Neplatná délka řetězce nebo vyrovnávací paměti (DM) Hodnota jednoho z argumentů délky názvu byla menší než 0, ale nebyla rovna SQL_NTS.
Hodnota jednoho z argumentů délky názvu překročila maximální hodnotu délky pro odpovídající katalog nebo název. Maximální délku každého katalogu nebo názvu lze získat voláním SQLGetInfo s hodnotami InfoType . (Viz "Komentáře.")
HY117 Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran.
HYC00 Nepovinná funkce není implementována. Byl zadán název katalogu a ovladač nebo zdroj dat katalogy nepodporuje.

Byl specifikován název schématu a ovladač nebo zdroj dat schémata nepodporuje.

Pro název schématu, tabulku nebo sloupce byl specifikován vzor vyhledávání řetězců a zdroj dat nepodporuje vyhledávací vzory pro jeden nebo více těchto argumentů.

Ovladač ani zdroj dat nepodporuje kombinaci aktuálních nastavení atributů SQL_ATTR_CONCURRENCY a SQL_ATTR_CURSOR_TYPE příkazu.

Atribut příkazu SQL_ATTR_USE_BOOKMARKS byl nastaven na SQL_UB_VARIABLE a atribut příkazu SQL_ATTR_CURSOR_TYPE byl nastaven na typ kurzoru, pro který ovladač nepodporuje záložky.
HYT00 Vypršel časový limit. Platnost časového limitu dotazu vypršela, než zdroj dat vrátil sadu výsledků. Časový limit je nastavený prostřednictvím sqlSetStmtAttr SQL_ATTR_QUERY_TIMEOUT.
HYT01 Vypršel časový limit připojení Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Ovladač tuto funkci nepodporuje. (DM) Ovladač přidružený k StatementHandle nepodporuje funkci.
IM017 Dotazování je zakázané v asynchronním režimu oznámení. Při každém použití modelu oznámení je dotazování zakázané.
IM018 K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci.

Comments

Tato funkce se obvykle používá před vykonáním příkazu k získání informací o sloupcích tabulky nebo tabulek z katalogu datového zdroje. SQLColumns lze použít k získávání dat pro všechny typy položek vrácených SQLTables. Kromě základních tabulek to může zahrnovat (ale není omezeno na) pohledy, synonyma, systémové tabulky a podobně. Naopak funkce SQLColAttribute a SQLDescribeCol popisují sloupce ve výsledné množině a funkce SQLNumResultCols vrací počet sloupců ve výsledné množině. Další informace naleznete v tématu Použití dat katalogu.

Note

Další informace o obecném použití, argumentech a vrácených datech funkcí katalogu ODBC naleznete v tématu Funkce katalogu.

SQLColumns vrací výsledky jako standardní množinu výsledků, seřazenou podle TABLE_CAT, TABLE_SCHEM, TABLE_NAME a ORDINAL_POSITION.

Note

Když aplikace funguje s ODBC 2. x driver, v množině výsledků se nevrátí žádný ORDINAL_POSITION sloupec. Výsledkem je, že při práci s ODBC 2. x ovladačů, pořadí sloupců v seznamu sloupců vrácených SQLColumns nemusí být nutně stejné jako pořadí sloupců vrácených při provedení příkazu SELECT aplikací na všech sloupcích v dané tabulce.

Note

SQLColumns nemusí vracet všechny sloupce. Například ovladač nemusí vracet informace o pseudosloupcích, například Oracle ROWID. Aplikace mohou používat jakýkoli platný sloupec, ať už je vrácen SQLColumns.

Některé sloupce, které může SQLStatistics vrátit , SQLColumns nevrátí. Například SQLColumns nevrací sloupce v indexu vytvořeném nad výrazem nebo filtrem, jako je SALARY + BENEFITS nebo DEPT = 0012.

Délky sloupců VARCHAR nejsou v tabulce uvedeny; skutečné délky závisí na zdroji dat. Pro určení skutečných délek sloupců TABLE_CAT, TABLE_SCHEM, TABLE_NAME a COLUMN_NAME může aplikace volat SQLGetInfo s možnostmi SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN a SQL_MAX_COLUMN_NAME_LEN.

Následující sloupce byly přejmenovány pro ROZHRANÍ ODBC 3.x. Změny názvů sloupců neovlivňují zpětnou kompatibilitu, protože aplikace se vážou podle čísla sloupce.

Sloupec ODBC 2.0 ODBC 3. sloupecx
kvalifikátor_tabulky TABLE_CAT
Vlastník tabulky TABLE_SCHEM
PŘESNOST COLUMN_SIZE
Délka DÉLKA_BUFFERU
ŠKÁLA Desetinné číslice
RÁDIX NUM_PREC_RADIX

Následující sloupce byly přidány do sady výsledků vrácené SQLColumns pro ODBC 3. x:

CHAR_OCTET_LENGTH
COLUMN_DEF

IS_NULLABLE
POŘADOVÁ_POZICE

SQL_DATOVÝ_TYP
SQL_DATETIME_SUB

Následující tabulka uvádí sloupce v sadě výsledků. Další sloupce za sloupcem 18 (IS_NULLABLE) může řidič definovat. Aplikace by měla získat přístup ke sloupcům specifickým pro ovladače tím, že odpočítává od konce sady výsledků místo určení explicitní řadové pozice. Další informace naleznete v tématu Data vrácená funkcemi katalogu.

Název sloupce Column

number
Datový typ Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Název katalogu; NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které katalogy nemají.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Schéma: NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které schémata nemají.
TABLE_NAME (ODBC 1.0) 3 Varchar, ne NULL Název tabulky
COLUMN_NAME (ODBC 1.0) 4 Varchar, ne NULL Název sloupce Ovladač vrací prázdný řetězec pro sloupec, který nemá jméno.
DATA_TYPE (ODBC 1.0) 5 Smallint, ne NULL Datový typ SQL Může se jednat o datový typ ODBC SQL nebo datový typ SQL specifický pro ovladač. Pro datové typy datového času a intervalů tento sloupec vrací stručný datový typ (například SQL_TYPE_DATE nebo SQL_INTERVAL_YEAR_TO_MONTH, místo nestručného datového typu jako SQL_DATETIME nebo SQL_INTERVAL). Seznam platných datových typů ODBC SQL najdete v tématu datových typů SQL v dodatku D: Datové typy. Informace o datových typech SQL specifických pro ovladače najdete v dokumentaci ovladače.

Datové typy vrácené pro ODBC 3. x a ODBC 2. X aplikací může být odlišné. Další informace naleznete v tématu Zpětné kompatibility a dodržování standardů.
TYPE_NAME (ODBC 1.0) 6 Varchar, ne NULL název datového typu závislého na zdroji dat; například "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" nebo "CHAR ( ) PRO BITOVÁ DATA.
COLUMN_SIZE (ODBC 1.0) 7 Celé číslo Pokud je DATA_TYPE SQL_CHAR nebo SQL_VARCHAR, tento sloupec obsahuje maximální délku znaků sloupce. U datových typů datového času je to celkový počet znaků potřebných k zobrazení hodnoty při převodu na znaky. U číselných datových typů je to buď celkový počet číslic, nebo celkový počet bitů povolených ve sloupci podle sloupce NUM_PREC_RADIX. U intervalových datových typů je to počet znaků v reprezentaci znaků intervalového literálu (jak je definováno přesností vedoucí intervalu, viz Interval Data Type Length v příloze D: Data Types). Pro více informací viz Velikost sloupce, desetinné číslice, délka přenosového oktetu a velikost displeje v příloze D: Typy dat.
BUFFER_LENGTH (ODBC 1.0) 8 Celé číslo Délka dat přenesených v bajtech při operacích SQLGetData, SQLFetch nebo SQLFetchScroll, pokud je SQL_C_DEFAULT specifikováno. U číselných dat se tato velikost může lišit od velikosti dat uložených ve zdroji. Tato hodnota se může lišit od sloupce COLUMN_SIZE pro data o postavě. Pro více informací o délce viz Velikost sloupce, desetinné číslice, délka přenosového oktetu a velikost displeje v příloze D: Typy dat.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Celkový počet významných číslic napravo od desetinné čárky. Pro SQL_TYPE_TIME a SQL_TYPE_TIMESTAMP tento sloupec obsahuje počet číslic v komponentě zlomkových sekund. U ostatních typů dat jsou to desetinné číslice sloupce na zdroji dat. U intervalových datových typů, které obsahují časovou složku, tento sloupec obsahuje počet číslic napravo od desetinné čárky (zlomky sekund). Pro intervalové datové typy, které neobsahují časovou složku, je tento sloupec 0. Pro více informací o desetinných číslicích viz Velikost sloupce, desetinné číslice, délka přenosového oktetu a velikost displeje v příloze D: Typy dat. NULL se vrací pro datové typy, kde DECIMAL_DIGITS není použitelný.
NUM_PREC_RADIX (ODBC 1.0) 10 Smallint Pro číselné datové typy 10 nebo 2. Pokud je to 10, hodnoty v COLUMN_SIZE a DECIMAL_DIGITS udávají počet desetinných číslic povolených pro sloupec. Například sloupec DECIMAL(12;5) by vrátil NUM_PREC_RADIX 10, COLUMN_SIZE 12 a DECIMAL_DIGITS 5; Sloupec FLOAT by mohl vrátit NUM_PREC_RADIX 10, COLUMN_SIZE 15 a DECIMAL_DIGITS null.

Pokud je to 2, hodnoty v COLUMN_SIZE a DECIMAL_DIGITS udávají počet bitů povolených ve sloupci. Například sloupec FLOAT může vrátit RADIX 2, COLUMN_SIZE 53 a DECIMAL_DIGITS NULL.

Hodnota NULL se vrátí pro datové typy, kde NUM_PREC_RADIX nelze použít.
NULLABLE (ODBC 1.0) 11 Smallint, ne NULL SQL_NO_NULLS pokud sloupec nemohl obsahovat hodnoty NULL.

SQL_NULLABLE pokud sloupec přijímá hodnoty NULL.

SQL_NULLABLE_UNKNOWN pokud není známo, zda sloupec přijímá hodnoty NULL.

Hodnota vrácená pro tento sloupec se liší od hodnoty vrácené pro sloupec IS_NULLABLE. Sloupec NULLABLE s jistotou znamená, že sloupec může přijímat NULL, ale nemůže s jistotou říct, že sloupec NULL nepřijímá. Sloupec IS_NULLABLE s jistotou znamená, že sloupec nemůže přijímat NULLs, ale nemůže s jistotou uvádět, že sloupec NULL přijímá.
POZNÁMKY (ODBC 1.0) 12 Varchar Popis sloupku.
COLUMN_DEF (ODBC 3.0) 13 Varchar Výchozí hodnota sloupce. Hodnota v tomto sloupci by měla být interpretována jako řetězec, pokud je uvedena v uvozovkách.

Pokud byla hodnota NULL zadána jako výchozí hodnota, jedná se o slovo NULL, které není uzavřeno v uvozovkách. Pokud výchozí hodnota nelze reprezentovat bez zkrácení, tento sloupec obsahuje ZKRÁCENOU hodnotu, bez uvedení jednotlivých uvozovek. Pokud nebyla zadána žádná výchozí hodnota, má tento sloupec hodnotu NULL.

Hodnotu COLUMN_DEF lze použít při generování nové definice sloupce, s výjimkou případů, kdy obsahuje hodnotu TRUNCATED.
SQL_DATA_TYPE (ODBC 3.0) 14 Smallint, ne NULL SQL datový typ, jak se objevuje v poli SQL_DESC_TYPE záznamu v IRD. Může se jednat o datový typ ODBC SQL nebo datový typ SQL specifický pro ovladač. Tento sloupec je stejný jako sloupec DATA_TYPE s výjimkou datových typů data a času a intervalu. Tento sloupec vrací nestručný datový typ (například SQL_DATETIME nebo SQL_INTERVAL) místo stručného datového typu (například SQL_TYPE_DATE nebo SQL_INTERVAL_YEAR_TO_MONTH) pro datové typy s datetime a intervalem. Pokud tento sloupec vrací SQL_DATETIME nebo SQL_INTERVAL, lze konkrétní datový typ určit ze sloupce SQL_DATETIME_SUB. Seznam platných datových typů ODBC SQL najdete v tématu datových typů SQL v dodatku D: Datové typy. Informace o datových typech SQL specifických pro ovladače najdete v dokumentaci ovladače.

Datové typy vrácené pro ODBC 3. x a ODBC 2. X aplikací může být odlišné. Další informace naleznete v tématu Zpětné kompatibility a dodržování standardů.
SQL_DATETIME_SUB (ODBC 3.0) 15 Smallint Kód podtypu pro datové typy datetime a interval. U jiných datových typů vrátí tento sloupec hodnotu NULL. Pro více informací o datetime a intervalových podkódech viz "SQL_DESC_DATETIME_INTERVAL_CODE" v SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Celé číslo Maximální délka ve sloupci znaku nebo binárního datového typu Pro všechny ostatní datové typy vrátí tento sloupec hodnotu NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Celé číslo není NULL Ordinální pozice sloupce v tabulce. První sloupec v tabulce je číslo 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NE", pokud sloupec neobsahuje seznamy NUL.

"ANO", pokud by sloupec mohl obsahovat NULL.

Tento sloupec vrací řetězec nulové délky, pokud není nulovost známa.

Pravidla ISO se dodržují pro určení neplatnosti. Systém DBMS kompatibilní se standardem ISO SQL nemůže vrátit prázdný řetězec.

Hodnota vrácená pro tento sloupec se liší od hodnoty vrácené pro sloupec NULLABLE. (Viz popis sloupce NULLABLE.)

Příklad kódu

V následujícím příkladu aplikace deklaruje buffery pro výslednou sadu vrácenou SQLColumns. Volá SQLColumns , aby vrátil sadu výsledků popisující každý sloupec v tabulce EMPLOYEE. Poté volá SQLBindCol , aby navázal sloupce v sadě výsledků na buffery. Nakonec aplikace načítá každý řádek dat pomocí SQLFetch a zpracovává je.

// SQLColumns_Function.cpp  
// compile with: ODBC32.lib  
#include <windows.h>  
#include <sqlext.h>  
#define STR_LEN 128 + 1  
#define REM_LEN 254 + 1  
  
// Declare buffers for result set data  
SQLCHAR szSchema[STR_LEN];  
SQLCHAR szCatalog[STR_LEN];  
SQLCHAR szColumnName[STR_LEN];  
SQLCHAR szTableName[STR_LEN];  
SQLCHAR szTypeName[STR_LEN];  
SQLCHAR szRemarks[REM_LEN];  
SQLCHAR szColumnDefault[STR_LEN];  
SQLCHAR szIsNullable[STR_LEN];  
  
SQLINTEGER ColumnSize;  
SQLINTEGER BufferLength;  
SQLINTEGER CharOctetLength;  
SQLINTEGER OrdinalPosition;  
  
SQLSMALLINT DataType;  
SQLSMALLINT DecimalDigits;  
SQLSMALLINT NumPrecRadix;  
SQLSMALLINT Nullable;  
SQLSMALLINT SQLDataType;  
SQLSMALLINT DatetimeSubtypeCode;  
  
SQLHSTMT hstmt = NULL;  
  
// Declare buffers for bytes available to return  
SQLINTEGER cbCatalog;  
SQLINTEGER cbSchema;  
SQLINTEGER cbTableName;  
SQLINTEGER cbColumnName;  
SQLINTEGER cbDataType;  
SQLINTEGER cbTypeName;  
SQLINTEGER cbColumnSize;  
SQLLEN cbBufferLength;  
SQLINTEGER cbDecimalDigits;  
SQLINTEGER cbNumPrecRadix;  
SQLINTEGER cbNullable;  
SQLINTEGER cbRemarks;  
SQLINTEGER cbColumnDefault;  
SQLINTEGER cbSQLDataType;  
SQLINTEGER cbDatetimeSubtypeCode;  
SQLINTEGER cbCharOctetLength;  
SQLINTEGER cbOrdinalPosition;  
SQLINTEGER cbIsNullable;  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt = 0;  
   SQLRETURN retcode;  
  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
   retcode = SQLColumns(hstmt, NULL, 0, NULL, 0, (SQLCHAR*)"CUSTOMERS", SQL_NTS, NULL, 0);  
  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
      // Bind columns in result set to buffers  
      SQLBindCol(hstmt, 1, SQL_C_CHAR, szCatalog, STR_LEN,&cbCatalog);  
      SQLBindCol(hstmt, 2, SQL_C_CHAR, szSchema, STR_LEN, &cbSchema);  
      SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);  
      SQLBindCol(hstmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);  
      SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);  
      SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);  
      SQLBindCol(hstmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);  
      SQLBindCol(hstmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength);  
      SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);  
      SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);  
      SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);  
      SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks);  
      SQLBindCol(hstmt, 13, SQL_C_CHAR, szColumnDefault, STR_LEN, &cbColumnDefault);  
      SQLBindCol(hstmt, 14, SQL_C_SSHORT, &SQLDataType, 0, &cbSQLDataType);  
      SQLBindCol(hstmt, 15, SQL_C_SSHORT, &DatetimeSubtypeCode, 0, &cbDatetimeSubtypeCode);  
      SQLBindCol(hstmt, 16, SQL_C_SLONG, &CharOctetLength, 0, &cbCharOctetLength);  
      SQLBindCol(hstmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);  
      SQLBindCol(hstmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable);  
  
      while (SQL_SUCCESS == retcode) {  
         retcode = SQLFetch(hstmt);  
         /*  
         if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)  
            0;   // show_error();  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
            0;   // Process fetched data  
         else  
            break;  
        */  
      }  
   }  
}  
Informace o Podívejte se
Vytvoření vazby vyrovnávací paměti ke sloupci v sadě výsledků SQLBindCol – funkce
Zrušení zpracování příkazů SQLCancel – funkce
Vrácení oprávnění pro sloupec nebo sloupce Funkce SQLColumnPrivileges
Načtení bloku dat nebo procházení sady výsledků SQLFetchScroll – funkce
Načítání více řádků dat Funkce SQLFetch
Vrácení sloupců, které jednoznačně identifikují řádek, nebo sloupců automaticky aktualizovaných transakcí Funkce SQLSpecialColumns
Statistiky a indexy v tabulkách Funkce SQLStatistics
Vrácení seznamu tabulek ve zdroji dat Funkce SQLTables
Vrácení oprávnění pro tabulku nebo tabulky Funkce SQLTablePrivileges