Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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;
*/
}
}
}
Související funkce
| 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 |