SQLColumns-funktion

Överensstämmelse
Version introducerad: ODBC 1.0 Standardsefterlevnad: Open Group

Summary
SQLColumns returnerar listan över kolumnnamn i angivna tabeller. Drivrutinen returnerar denna information som ett resultat som satts på den angivna StatementHandle.

Syntax

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

Arguments

StatementHandle
[Indata] Instruktionshandtag.

CatalogName
[Indata] Katalognamn. Om en drivrutin stödjer kataloger för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, indikerar en tom sträng ("") de tabeller som inte har kataloger. CatalogName kan inte innehålla ett strängsökningsmönster.

Note

Om attributet SQL_ATTR_METADATA_ID sats sätts till SQL_TRUE behandlas CatalogName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är CatalogName ett vanligt argument; Den behandlas bokstavligt, och dess fall är betydelsefullt. Mer information finns i Argument i Katalogfunktioner.

NameLength1
[Input] Längd i tecken i *CatalogName.

Schema-namn
[Input] Strängsökningsmönster för schemanamn. Om en drivrutin stöder scheman för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, indikerar en tom sträng ("") de tabeller som inte har scheman.

Note

Om attributet SQL_ATTR_METADATA_ID är satt till SQL_TRUE behandlas SchemaName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är SchemaName ett mönstervärdesargument; Den behandlas bokstavligt, och dess fall är betydelsefullt.

NameLength2
[Input] Längd i tecken i *SchemaName.

TableName
[Input] Strängsökningsmönster för tabellnamn.

Note

Om attributet SQL_ATTR_METADATA_ID sats sätts till SQL_TRUE behandlas TableName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är TableName ett mönstervärdesargument; Den behandlas bokstavligt, och dess fall är betydelsefullt.

NameLength3
[Input] Längd i tecken av *TableName.

KolumnNamn
[Indata] Strängsökningsmönster för kolumnnamn.

Note

Om SQL_ATTR_METADATA_ID-instruktionsattributet är inställt på SQL_TRUE behandlas ColumnName- som en identifierare och dess skiftläge är inte betydande. Om det är SQL_FALSE är ColumnName ett mönstervärdeargument. det behandlas bokstavligen, och dess fall är betydande.

NameLength4
[Indata] Längd i tecken i *ColumnName.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.

Diagnostics

När SQLColumns returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med en HandleType av SQL_HANDLE_STMT och ett Handle av StatementHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLColumns och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.

SQLSTATE Error Beskrivning
01000 Allmän varning Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
08S01 Kommunikationslänkfel Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen.
24000 Ogiltigt markörtillstånd En markör var öppen på StatementHandle, och SQLFetch eller SQLFetchScroll hade anropats. Det här felet returneras av Driver Manager om SQLFetch eller SQLFetchScroll inte har returnerat SQL_NO_DATA och returneras av drivrutinen om SQLFetch eller SQLFetchScroll har returnerat SQL_NO_DATA.

En markör var öppen på StatementHandle men SQLFetch eller SQLFetchScroll hade inte anropats.
40001 Serialiseringsfel Transaktionen återställdes på grund av ett resursstopp med en annan transaktion.
40003 Slutförande av instruktion okänd Den associerade anslutningen misslyckades under körningen av den här funktionen och transaktionens tillstånd kan inte fastställas.
HY000 Allmänt fel Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLGetDiagRec i *MessageText-bufferten beskriver felet och dess orsak.
HY001 Fel vid minnesallokering Drivrutinen kunde inte allokera minne som krävs för att stödja körning eller slutförande av funktionen.
HY008 Åtgärden avbröts Asynkron bearbetning aktiverades för StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle. Sedan anropades funktionen igen på StatementHandle.

Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle från en annan tråd i ett flertrådsprogram.
HY009 Ogiltig användning av null-pekare Attributet SQL_ATTR_METADATA_ID statement sattes till SQL_TRUE, argumentet CatalogName var en nullpekare, och SQL_CATALOG_NAME InfoType visar att katalognamn stöds.

(DM) Attributet SQL_ATTR_METADATA_ID statement sattes till SQL_TRUE, och argumentet SchemaName,TableName eller ColumnName var en nullpekare.
HY010 Funktionssekvensfel (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLColumns-funktionen anropades.

(DM) SQLExecute, SQLExecDirect eller SQLMoreResults anropades för StatementHandle och returnerades SQL_PARAM_DATA_AVAILABLE. Den här funktionen anropades innan data hämtades för alla strömmade parametrar.

(DM) En asynkront körande funktion (inte den här) anropades för StatementHandle och kördes fortfarande när den här funktionen anropades.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations eller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner.
HY013 Minneshanteringsfel Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist.
HY090 Ogiltig sträng- eller buffertlängd (DM) Värdet på ett av namnlängdsargumenten var mindre än 0 men inte lika med SQL_NTS.
Värdet på ett av namnlängdsargumenten översteg det maximala längdvärdet för motsvarande katalog eller namn. Den maximala längden på varje katalog eller namn kan erhållas genom att anropa SQLGetInfo med InfoType-värdena . (Se "Kommentarer.")
HY117 Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion.
HYC00 Valfri funktion har inte implementerats Ett katalognamn angavs, och drivrutinen eller datakällan stöder inte kataloger.

Ett schemanamn specificerades, och drivrutinen eller datakällan stöder inte scheman.

Ett strängsökningsmönster specificerades för schemanamnet, tabellnamnet eller kolumnnamnet, och datakällan stöder inte sökmönster för ett eller flera av dessa argument.

Kombinationen av de aktuella inställningarna för SQL_ATTR_CONCURRENCY- och SQL_ATTR_CURSOR_TYPE-instruktionsattributen stöds inte av drivrutinen eller datakällan.

SQL_ATTR_USE_BOOKMARKS-instruktionsattributet har angetts till SQL_UB_VARIABLE och SQL_ATTR_CURSOR_TYPE-instruktionsattributet har angetts till en markörtyp som drivrutinen inte stöder bokmärken för.
HYT00 Tidsgränsen har upphört att gälla Tidsgränsen för frågan upphörde att gälla innan datakällan returnerade resultatuppsättningen. Tidsgränsen anges via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Tidsgränsen för anslutningen gick ut Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Drivrutinen stöder inte den här funktionen (DM) Drivrutinen som är associerad med StatementHandle stöder inte funktionen.
IM017 Avsökning är inaktiverat i asynkront meddelandeläge När meddelandemodellen används inaktiveras avsökningen.
IM018 SQLCompleteAsync har inte anropats för att slutföra den tidigare asynkrona åtgärden på det här handtaget. Om det tidigare funktionsanropet på handtaget returnerar SQL_STILL_EXECUTING och om meddelandeläget är aktiverat måste SQLCompleteAsync anropas på handtaget för att utföra efterbearbetningen och slutföra åtgärden.

Comments

Denna funktion används vanligtvis före satsexekvering för att hämta information om kolumner för en tabell eller tabeller från datakällans katalog. SQLColumns kan användas för att hämta data för alla typer av objekt som returneras av SQLTables. Utöver bastabeller kan detta inkludera (men är inte begränsat till) vyer, synonymer, systemtabeller och så vidare. Till skillnad från detta beskriver funktionerna SQLColAttribute och SQLDescribeCol kolumnerna i en resultatuppsättning och funktionen SQLNumResultCols returnerar antalet kolumner i en resultatuppsättning. Mer information finns i Användning av katalogdata.

Note

Mer information om allmän användning, argument och returnerade data för ODBC-katalogfunktioner finns i Katalogfunktioner.

SQLColumns returnerar resultaten som en standardmängd resultat, ordnade efter TABLE_CAT, TABLE_SCHEM, TABLE_NAME och ORDINAL_POSITION.

Note

När en applikation fungerar med en ODBC 2. x driver returneras ingen ORDINAL_POSITION kolumn i resultatuppsättningen. Som ett resultat, när man arbetar med ODBC 2. x-drivrutiner är ordningen på kolumnerna i kolumnlistan som returneras av SQLColumns inte nödvändigtvis densamma som ordningen på kolumnerna som returneras när applikationen utför en SELECT-sats på alla kolumner i den tabellen.

Note

SQLColumns kanske inte returnerar alla kolumner. Till exempel kanske en drivrutin inte returnerar information om pseudokolumner, såsom Oracle ROWID. Applikationer kan använda vilken giltig kolumn som helst, oavsett om den returneras av SQLColumns.

Vissa kolumner som kan returneras av SQLStatistics returneras inte av SQLColumns. Till exempel returnerar inte SQLColumns kolumnerna i ett index som skapats över ett uttryck eller filter, såsom SALARY + BENEFITS eller DEPT = 0012.

Längderna på VARCHAR-kolonner visas inte i tabellen; de faktiska längderna beror på datakällan. För att bestämma de faktiska längderna på kolumnerna TABLE_CAT, TABLE_SCHEM, TABLE_NAME och COLUMN_NAME kan ett program anropa SQLGetInfo med alternativen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN och SQL_MAX_COLUMN_NAME_LEN.

Följande kolumner har bytt namn till ODBC 3. x. Kolumnnamnsändringarna påverkar inte bakåtkompatibilitet eftersom applikationer binds efter kolumnnummer.

ODBC 2.0-kolumn ODBC 3. X-kolumnen
TABLE_QUALIFIER TABLE_CAT
TABELLÄGARE TABELL_SCHEMA
PRECISION KOLUMN_STORLEK
LÄNGD BUFFERT_LÄNGD
SKALA decimaltecken
RADIX NUM_PREC_RADIX

Följande kolumner har lagts till i resultatmängden som returnerats av SQLColumns för ODBC 3. x:

CHAR_OCTET_LENGTH
KOLUMN_DEF

IS_NULLABLE
ORDINALS_POSITION

SQL_DATA_TYPE
SQL_DATETIME_SUB

I följande tabell visas kolumnerna i resultatuppsättningen. Ytterligare kolumner bortom kolumn 18 (IS_NULLABLE) kan definieras av drivrutinen. Ett program bör få åtkomst till drivrutinsspecifika kolumner genom att räkna ned från slutet av resultatuppsättningen i stället för att ange en explicit ordningstalsposition. Mer information finns i Data som returneras av katalogfunktioner.

Kolumnnamn Column

number
Datatyp Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Katalognamn; NULL om det inte gäller datakällan. Om en drivrutin stödjer kataloger för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, returnerar den en tom sträng ("") för de tabeller som inte har kataloger.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Schemanamn; NULL om det inte gäller datakällan. Om en drivrutin stödjer scheman för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, returnerar den en tom sträng ("") för de tabeller som inte har scheman.
TABLE_NAME (ODBC 1.0) 3 Varchar inte NULL Tabellnamn.
COLUMN_NAME (ODBC 1.0) 4 Varchar inte NULL Kolumnnamn. Drivrutinen returnerar en tom sträng för en kolumn som inte har något namn.
DATA_TYPE (ODBC 1.0) 5 Smallint, inte NULL SQL-datatyp. Detta kan vara en ODBC SQL-datatyp eller en drivrutinsspecifik SQL-datatyp. För datumtids- och intervalldatatyper returnerar denna kolumn den korta datatypen (såsom SQL_TYPE_DATE eller SQL_INTERVAL_YEAR_TO_MONTH, istället för den icke-koncisa datatypen som SQL_DATETIME eller SQL_INTERVAL). För en lista över giltiga ODBC SQL-datatyper, se SQL Data Types i Appendix D: Data Types. Information om drivrutinsspecifika SQL-datatyper finns i drivrutinsdokumentationen.

Datatyperna returnerades för ODBC 3. x och ODBC 2. X tillämpningar kan vara olika. Mer information finns i Bakåtkompatibilitet och standardefterlevnad.
TYPE_NAME (ODBC 1.0) 6 Varchar inte NULL Datakällasberoende datatypsnamn; till exempel "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" eller "CHAR ( ) FÖR BITDATA".
COLUMN_SIZE (ODBC 1.0) 7 Integer Om DATA_TYPE är SQL_CHAR eller SQL_VARCHAR innehåller denna kolumn kolumnens maximala längd i tecken. För datatyper på datetime är detta det totala antalet tecken som krävs för att visa värdet när det konverteras till tecken. För numeriska datatyper är detta antingen det totala antalet siffror eller det totala antalet bitar som tillåts i kolumnen, enligt den NUM_PREC_RADIX kolumnen. För intervalldatatyper är detta antalet tecken i teckenrepresentationen av intervallliteralen (definierad av intervallets ledande precision, se Intervalldatatyplängd i bilaga D: Datatyper). För mer information, se Kolumnstorlek, decimalsiffror, överföringsoktettlängd och displaystorlek i bilaga D: Datatyper.
BUFFER_LENGTH (ODBC 1.0) 8 Integer Längden i byte data som överförs på en SQLGetData-, SQLFetch- eller SQLFetchScroll-operation om SQL_C_DEFAULT specificeras. För numeriska data kan denna storlek skilja sig från storleken på datan som lagras i datakällan. Detta värde kan skilja sig från COLUMN_SIZE kolumn för teckendata. För mer information om längd, se Kolumnstorlek, decimalsiffror, Transfer Oktettlängd och Displaystorlek i Appendix D: Data Types.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Det totala antalet signifikanta siffror till höger om decimalpunkten. För SQL_TYPE_TIME och SQL_TYPE_TIMESTAMP innehåller denna kolumn antalet siffror i bråkdelssekundskomponenten. För de andra datatyperna är detta decimalsiffrorna i kolumnen på datakällan. För intervalldatatyper som innehåller en tidskomponent innehåller denna kolumn antalet siffror till höger om decimalpunkten (bråkdelssekunder). För intervalldatatyper som inte innehåller någon tidskomponent är denna kolumn 0. För mer information om decimalsiffror, se Kolumnstorlek, Decimalsiffror, Transfer Oktett Length och Display Size i Appendix D: Data Types. NULL returneras för datatyper där DECIMAL_DIGITS inte är tillämplig.
NUM_PREC_RADIX (ODBC 1.0) 10 Smallint För numeriska datatyper, antingen 10 eller 2. Om det är 10 anger värdena i COLUMN_SIZE och DECIMAL_DIGITS antalet decimalsiffror som tillåts för kolumnen. Till exempel returnerar en DECIMAL(12,5) kolumn en NUM_PREC_RADIX på 10, en COLUMN_SIZE på 12 och en DECIMAL_DIGITS av 5; en FLOAT-kolumn kan returnera en NUM_PREC_RADIX på 10, en COLUMN_SIZE på 15 och en DECIMAL_DIGITS null.

Om det är 2 ger värdena i COLUMN_SIZE och DECIMAL_DIGITS antalet bitar som tillåts i kolumnen. Till exempel kan en FLOAT-kolumn returnera en RADIX på 2, en COLUMN_SIZE på 53 och en DECIMAL_DIGITS på NULL.

NULL returneras för datatyper där NUM_PREC_RADIX inte är tillämpligt.
NULLBAR (ODBC 1.0) 11 Smallint, inte NULL SQL_NO_NULLS om kolumnen inte kunde innehålla NULL-värden.

SQL_NULLABLE om kolumnen accepterar NULL-värden.

SQL_NULLABLE_UNKNOWN om det inte är känt om kolumnen accepterar NULL-värden.

Värdet som returneras för denna kolumn skiljer sig från värdet som returneras för kolumnen IS_NULLABLE. Kolumnen NULLABLE indikerar med säkerhet att en kolumn kan acceptera NULLs, men kan inte med säkerhet ange att en kolumn inte accepterar NULLs. Kolumnen IS_NULLABLE anger med säkerhet att en kolumn inte kan acceptera NULLs, men kan inte med säkerhet ange att en kolumn accepterar NULLs.
KOMMENTARER (ODBC 1.0) 12 Varchar En beskrivning av kolumnen.
COLUMN_DEF (ODBC 3.0) 13 Varchar Standardvärdet för kolumnen. Värdet i denna kolumn ska tolkas som en sträng om det är inneslutet i citattecken.

Om NULL angavs som standardvärde är den här kolumnen ordet NULL, inte omgivet av citattecken. Om standardvärdet inte kan representeras utan trunkering, innehåller denna kolumn TRUNCATED, utan att innehålla citattecken. Om inget standardvärde har angetts är den här kolumnen NULL.

Värdet för COLUMN_DEF kan användas för att generera en ny kolumndefinition, förutom när det innehåller värdet TRUNKERAD.
SQL_DATA_TYPE (ODBC 3.0) 14 Smallint, inte NULL SQL-datatyp, som den visas i fältet SQL_DESC_TYPE post i IRD. Detta kan vara en ODBC SQL-datatyp eller en drivrutinsspecifik SQL-datatyp. Den här kolumnen är samma som kolumnen DATA_TYPE, förutom datatyperna datetime och interval. Denna kolumn returnerar den icke-koncisa datatypen (såsom SQL_DATETIME eller SQL_INTERVAL), istället för den korta datatypen (såsom SQL_TYPE_DATE eller SQL_INTERVAL_YEAR_TO_MONTH) för datumtids- och intervalldatatyper. Om denna kolumn returnerar SQL_DATETIME eller SQL_INTERVAL kan den specifika datatypen bestämmas från kolumnen SQL_DATETIME_SUB. För en lista över giltiga ODBC SQL-datatyper, se SQL Data Types i Appendix D: Data Types. Information om drivrutinsspecifika SQL-datatyper finns i drivrutinsdokumentationen.

Datatyperna returnerades för ODBC 3. x och ODBC 2. X tillämpningar kan vara olika. Mer information finns i Bakåtkompatibilitet och standardefterlevnad.
SQL_DATETIME_SUB (ODBC 3.0) 15 Smallint Undertypkoden för datatyperna datetime och interval. För andra datatyper returnerar den här kolumnen en NULL. För mer information om datetime- och intervallunderkoder, se "SQL_DESC_DATETIME_INTERVAL_CODE" i SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Integer Den maximala längden i byte av en kolumn för ett tecken eller en binär datatyp. För alla andra datatyper returnerar den här kolumnen en NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Heltal inte NULL Kolumnens ordinala position i tabellen. Den första kolumnen i tabellen är nummer 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NEJ" om kolumnen inte innehåller NULLs.

"JA" om kolumnen kunde innehålla NULLs.

Denna kolumn returnerar en sträng av nolllängd om nullbarhet är okänd.

ISO-regler följs för att avgöra nullbarhet. En ISO SQL-kompatibel DBMS kan inte returnera en tom sträng.

Värdet som returneras för denna kolumn skiljer sig från värdet som returneras för kolumnen NULLABLE. (Se beskrivningen av kolumnen NULLABLE.)

Kodexempel

I följande exempel deklarerar en applikation buffertar för resultatmängden som returneras av SQLColumns. Den anropar SQLColumns för att returnera en resultatmängd som beskriver varje kolumn i EMPLOYEE-tabellen. Den anropar sedan SQLBindCol för att binda kolumnerna i resultatuppsättningen till buffertarna. Slutligen hämtar applikationen varje datarad med SQLFetch och bearbetar den.

// 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;  
        */  
      }  
   }  
}  
Mer information om Se
Binda en buffert till en kolumn i en resultatuppsättning SQLBindCol-funktion
Avbryta instruktionsbearbetning SQLCancel-funktion
Återgivning av privilegier för en kolumn eller kolumner SQLColumnPrivilegier-funktionen
Hämtar ett datablock eller bläddrar igenom en resultatuppsättning SQLFetchScroll-funktion
Hämtar flera rader med data SQLFetch-funktion
Returnerande kolumner som entydigt identifierar en rad, eller kolumner som automatiskt uppdateras av en transaktion SQLSspecialColumns-funktionen
Återlämnande tabellstatistik och index SQLStatistikfunktion
Returnera en lista med tabeller i en datakälla SQLTables-funktionen
Återställande av privilegier för en tabell eller tabeller SQLTablePrivileges-funktionen