Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ö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 SQLCancelHandle på StatementHandle. Sedan anropades funktionen igen på StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle 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;
*/
}
}
}
Relaterade funktioner
| 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 |