Funzione SQLColumns

Conformità
Versione introdotta: Conformità standard ODBC 1.0: Gruppo aperto

Riepilogo
SQLColumns restituisce l'elenco dei nomi di colonna nelle tabelle specificate. Il driver restituisce queste informazioni come set di risultati nell'oggetto StatementHandle specificato.

Sintassi

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

Argomenti

StatementHandle
[Input] Handle di istruzione.

CatalogName
[Input] Nome catalogo. Se un driver supporta cataloghi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica le tabelle che non dispongono di cataloghi. CatalogName non può contenere un criterio di ricerca di stringhe.

Nota

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, CatalogName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, CatalogName è un argomento ordinario; viene trattato letteralmente e il relativo caso è significativo. Per altre informazioni, vedere Argomenti in Funzioni del catalogo.

NameLength1
[Input] Lunghezza in caratteri di *CatalogName.

SchemaName
[Input] Modello di ricerca di stringhe per i nomi degli schemi. Se un driver supporta schemi per alcune tabelle, ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica le tabelle che non dispongono di schemi.

Nota

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, SchemaName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, SchemaName è un argomento del valore del modello, che viene trattato letteralmente e il relativo case è significativo.

NameLength2
[Input] Lunghezza in caratteri di *SchemaName.

TableName
[Input] Modello di ricerca di stringhe per i nomi di tabella.

Nota

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, TableName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, TableName è un argomento del valore del criterio; viene trattato letteralmente e il relativo case è significativo.

NameLength3
[Input] Lunghezza in caratteri di *TableName.

ColumnName
[Input] Modello di ricerca di stringhe per i nomi di colonna.

Nota

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, ColumnName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, ColumnName è un argomento del valore del criterio; viene trattato letteralmente e il relativo case è significativo.

NameLength4
[Input] Lunghezza in caratteri di *ColumnName.

Resi

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostica

Quando SQLColumns restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_STMT e handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE restituiti in genere da SQLColumns e ne spiega ognuno nel contesto di questa funzione. La notazione "(DM)" precede le descrizioni di SQLSTATEs restituite da Gestione driver. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Errore Descrizione
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
08S01 Errore del collegamento di comunicazione Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione.
24000 Stato del cursore non valido È stato aperto un cursore in StatementHandle e è stato chiamato SQLFetch o SQLFetchScroll. Questo errore viene restituito da Gestione driver se SQLFetch o SQLFetchScroll non ha restituito SQL_NO_DATA e viene restituito dal driver se SQLFetch o SQLFetchScroll ha restituito SQL_NO_DATA.

È stato aperto un cursore in StatementHandle , ma SQLFetch o SQLFetchScroll non è stato chiamato.
40001 Errore di serializzazione È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione.
40003 Completamento istruzione sconosciuto La connessione associata non è riuscita durante l'esecuzione di questa funzione e non è possibile determinare lo stato della transazione.
HY000 Errore generale: Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa.
HY001 Errore di allocazione della memoria Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY008 Operazione annullata L'elaborazione asincrona è stata abilitata per StatementHandle. La funzione è stata chiamata e prima di completare l'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata in StatementHandle. La funzione è stata quindi chiamata di nuovo in StatementHandle.

La funzione è stata chiamata e prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stato chiamato su StatementHandle da un thread diverso in un'applicazione multithread.
HY009 Uso non valido del puntatore Null L'attributo dell'istruzione SQL_ATTR_METADATA_ID è stato impostato su SQL_TRUE, l'argomento CatalogName è un puntatore Null e l'SQL_CATALOG_NAME InfoType restituisce che i nomi di catalogo sono supportati.

(DM) L'attributo dell'istruzione SQL_ATTR_METADATA_ID è stato impostato su SQL_TRUE e l'argomento SchemaName, TableName o ColumnName è un puntatore Null.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando è stata chiamata la funzione SQLColumns .

(DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per StatementHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.

(DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
HY013 Errore di gestione della memoria Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente.
HY090 Lunghezza della stringa o del buffer non valida (DM) Il valore di uno degli argomenti di lunghezza del nome è minore di 0 ma non uguale a SQL_NTS.
Il valore di uno degli argomenti lunghezza nome ha superato il valore di lunghezza massima per il catalogo o il nome corrispondente. La lunghezza massima di ogni catalogo o nome può essere ottenuta chiamando SQLGetInfo con i valori di InfoType . (Vedere "Comments.")
HY117 La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.
HYC00 Funzionalità facoltativa non implementata È stato specificato un nome di catalogo e il driver o l'origine dati non supporta i cataloghi.

È stato specificato un nome di schema e il driver o l'origine dati non supporta gli schemi.

È stato specificato un criterio di ricerca di stringhe per il nome dello schema, il nome della tabella o il nome della colonna e l'origine dati non supporta i criteri di ricerca per uno o più di questi argomenti.

La combinazione delle impostazioni correnti degli attributi delle istruzioni SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE non è supportata dal driver o dall'origine dati.

L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS è stato impostato su SQL_UB_VARIABLE e l'attributo dell'istruzione SQL_ATTR_CURSOR_TYPE è stato impostato su un tipo di cursore per cui il driver non supporta i segnalibri.
HYT00 Timeout scaduto Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Il timeout della connessione è scaduto Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Il driver non supporta questa funzione (DM) Il driver associato a StatementHandle non supporta la funzione.
IM017 Il polling è disabilitato in modalità di notifica asincrona Ogni volta che viene usato il modello di notifica, il polling è disabilitato.
IM018 SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, è necessario chiamare SQLCompleteAsync sull'handle per eseguire la post-elaborazione e completare l'operazione.

Commenti

Questa funzione viene in genere utilizzata prima dell'esecuzione dell'istruzione per recuperare informazioni sulle colonne per una tabella o tabelle dal catalogo dell'origine dati. SQLColumns può essere usato per recuperare i dati per tutti i tipi di elementi restituiti da SQLTables. Oltre alle tabelle di base, questa operazione può includere ( ma non solo) viste, sinonimi, tabelle di sistema e così via. Al contrario, le funzioni SQLColAttribute e SQLDescribeCol descrivono le colonne in un set di risultati e la funzione SQLNumResultCols restituisce il numero di colonne in un set di risultati. Per altre informazioni, vedere Uses of Catalog Data.For more information, see Uses of Catalog Data.

Nota

Per altre informazioni sull'utilizzo generale, gli argomenti e i dati restituiti delle funzioni del catalogo ODBC, vedere Funzioni del catalogo.

SQLColumns restituisce i risultati come set di risultati standard, ordinato per TABLE_CAT, TABLE_SCHEM, TABLE_NAME e ORDINAL_POSITION.

Nota

Quando un'applicazione funziona con ODBC 2.x driver, nessuna colonna ORDINAL_POSITION viene restituita nel set di risultati. Di conseguenza, quando si lavora con ODBC 2.x drivers, l'ordine delle colonne nell'elenco di colonne restituito da SQLColumns non corrisponde necessariamente all'ordine delle colonne restituite quando l'applicazione esegue un'istruzione SELECT su tutte le colonne di tale tabella.

Nota

SQLColumns potrebbe non restituire tutte le colonne. Ad esempio, un driver potrebbe non restituire informazioni sulle pseudo-colonne, ad esempio Oracle ROWID. Le applicazioni possono usare qualsiasi colonna valida, indipendentemente dal fatto che venga restituita da SQLColumns.

Alcune colonne che possono essere restituite da SQLStatistics non vengono restituite da SQLColumns. Ad esempio, SQLColumns non restituisce le colonne in un indice creato su un'espressione o un filtro, ad esempio SALARY + BENEFITS o DEPT = 0012.

Le lunghezze delle colonne VARCHAR non vengono visualizzate nella tabella; le lunghezze effettive dipendono dall'origine dati. Per determinare le lunghezze effettive delle colonne TABLE_CAT, TABLE_SCHEM, TABLE_NAME e COLUMN_NAME, un'applicazione può chiamare SQLGetInfo con le opzioni SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN e SQL_MAX_COLUMN_NAME_LEN.

Le colonne seguenti sono state rinominate per ODBC 3.x. Le modifiche apportate al nome della colonna non influiscono sulla compatibilità con le versioni precedenti perché le applicazioni si associano per numero di colonna.

Colonna ODBC 2.0 ODBC 3.x colonna
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
PRECISION COLUMN_SIZE
LENGTH BUFFER_LENGTH
SCALE DECIMAL_DIGITS
RADIX NUM_PREC_RADIX

Le colonne seguenti sono state aggiunte al set di risultati restituito da SQLColumns per ODBC 3.x:

CHAR_OCTET_LENGTH
COLUMN_DEF

IS_NULLABLE
ORDINAL_POSITION

SQL_DATA_TYPE
SQL_DATETIME_SUB

Nella tabella seguente sono elencate le colonne nel set di risultati. Le colonne aggiuntive successive alla colonna 18 (IS_NULLABLE) possono essere definite dal driver. Un'applicazione deve ottenere l'accesso alle colonne specifiche del driver con il conteggio dalla fine del set di risultati invece di specificare una posizione ordinale esplicita. Per altre informazioni, vedere Dati restituiti dalle funzioni del catalogo.

Nome colonna Column

number
Tipo di dati Commenti
TABLE_CAT (ODBC 1.0) 1 Varchar Nome catalogo; NULL se non applicabile all'origine dati. Se un driver supporta cataloghi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di cataloghi.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Nome schema; NULL se non applicabile all'origine dati. Se un driver supporta schemi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di schemi.
TABLE_NAME (ODBC 1.0) 3 Varchar non NULL Nome tabella.
COLUMN_NAME (ODBC 1.0) 4 Varchar non NULL Nome colonna. Il driver restituisce una stringa vuota per una colonna che non ha un nome.
DATA_TYPE (ODBC 1.0) 5 Smallint non NULL Tipo di dati SQL. Può trattarsi di un tipo di dati SQL ODBC o di un tipo di dati SQL specifico del driver. Per i tipi di dati datetime e interval, questa colonna restituisce il tipo di dati conciso, ad esempio SQL_TYPE_DATE o SQL_INTERVAL_YEAR_TO_MONTH, anziché il tipo di dati non inconciso, ad esempio SQL_DATETIME o SQL_INTERVAL. Per un elenco dei tipi di dati SQL ODBC validi, vedere Tipi di dati SQL nell'Appendice D: Tipi di dati. Per informazioni sui tipi di dati SQL specifici del driver, vedere la documentazione del driver.

Tipi di dati restituiti per ODBC 3.x e ODBC 2.Le applicazioni x possono essere diverse. Per altre informazioni, vedere Compatibilità con le versioni precedenti e Conformità degli standard.
TYPE_NAME (ODBC 1.0) 6 Varchar non NULL Nome del tipo di dati dipendente dall'origine dati; ad esempio "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" o "CHAR ( ) FOR BIT DATA".
COLUMN_SIZE (ODBC 1.0) 7 Integer Se DATA_TYPE è SQL_CHAR o SQL_VARCHAR, questa colonna contiene la lunghezza massima in caratteri della colonna. Per i tipi di dati datetime, si tratta del numero totale di caratteri necessari per visualizzare il valore quando viene convertito in caratteri. Per i tipi di dati numerici, si tratta del numero totale di cifre o del numero totale di bit consentiti nella colonna, in base alla colonna NUM_PREC_RADIX. Per i tipi di dati interval, si tratta del numero di caratteri nella rappresentazione di caratteri del valore letterale intervallo (come definito dalla precisione iniziale dell'intervallo, vedere Intervallo lunghezza del tipo di dati nell'Appendice D: Tipi di dati). Per altre informazioni, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati.
BUFFER_LENGTH (ODBC 1.0) 8 Integer Lunghezza in byte di dati trasferiti in un'operazione SQLGetData, SQLFetch o SQLFetchScroll se viene specificato SQL_C_DEFAULT. Per i dati numerici, queste dimensioni possono differire dalle dimensioni dei dati archiviati nell'origine dati. Questo valore potrebbe essere diverso da COLUMN_SIZE colonna per i dati di tipo carattere. Per altre informazioni sulla lunghezza, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Numero totale di cifre significative a destra del separatore decimale. Per SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP, questa colonna contiene il numero di cifre nel componente secondi frazionari. Per gli altri tipi di dati, si tratta delle cifre decimali della colonna nell'origine dati. Per i tipi di dati intervallo che contengono un componente temporale, questa colonna contiene il numero di cifre a destra del separatore decimale (secondi frazionari). Per i tipi di dati interval che non contengono un componente time, questa colonna è 0. Per altre informazioni sulle cifre decimali, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati. Viene restituito NULL per i tipi di dati in cui DECIMAL_DIGITS non è applicabile.
NUM_PREC_RADIX (ODBC 1.0) 10 Smallint Per i tipi di dati numerici, 10 o 2. Se è 10, i valori in COLUMN_SIZE e DECIMAL_DIGITS assegnare il numero di cifre decimali consentite per la colonna. Ad esempio, una colonna DECIMAL(12,5) restituisce un NUM_PREC_RADIX di 10, un COLUMN_SIZE di 12 e un DECIMAL_DIGITS di 5; Una colonna FLOAT può restituire un NUM_PREC_RADIX di 10, un COLUMN_SIZE di 15 e un DECIMAL_DIGITS di NULL.

Se è 2, i valori in COLUMN_SIZE e DECIMAL_DIGITS assegnare il numero di bit consentiti nella colonna. Ad esempio, una colonna FLOAT potrebbe restituire un VALORE RADIX pari a 2, un COLUMN_SIZE di 53 e un DECIMAL_DIGITS null.

Viene restituito NULL per i tipi di dati in cui NUM_PREC_RADIX non è applicabile.
NULLABLE (ODBC 1.0) 11 Smallint non NULL SQL_NO_NULLS se la colonna non può includere valori NULL.

SQL_NULLABLE se la colonna accetta valori NULL.

SQL_NULLABLE_UNKNOWN se non è noto se la colonna accetta valori NULL.

Il valore restituito per questa colonna è diverso dal valore restituito per la colonna IS_NULLABLE. La colonna NULLABLE indica con certezza che una colonna può accettare valori NULL, ma non può indicare con certezza che una colonna non accetta valori NULL. La colonna IS_NULLABLE indica con certezza che una colonna non può accettare valori NULL, ma non può indicare con certezza che una colonna accetta valori NULL.
OSSERVAZIONI (ODBC 1.0) 12 Varchar Descrizione della colonna.
COLUMN_DEF (ODBC 3.0) 13 Varchar Valore predefinito della colonna. Il valore in questa colonna deve essere interpretato come stringa se racchiuso tra virgolette.

Se è stato specificato NULL come valore predefinito, questa colonna è la parola NULL, non racchiusa tra virgolette. Se il valore predefinito non può essere rappresentato senza troncamento, questa colonna contiene TRUNCATED, senza racchiudere virgolette singole. Se non è stato specificato alcun valore predefinito, questa colonna è NULL.

Il valore di COLUMN_DEF può essere usato per generare una nuova definizione di colonna, tranne quando contiene il valore TRUNCATED.
SQL_DATA_TYPE (ODBC 3.0) 14 Smallint non NULL Tipo di dati SQL, come viene visualizzato nel campo del record SQL_DESC_TYPE in IRD. Può trattarsi di un tipo di dati SQL ODBC o di un tipo di dati SQL specifico del driver. Questa colonna corrisponde alla colonna DATA_TYPE, ad eccezione dei tipi di dati datetime e interval. Questa colonna restituisce il tipo di dati non conciso ,ad esempio SQL_DATETIME o SQL_INTERVAL, anziché il tipo di dati conciso (ad esempio SQL_TYPE_DATE o SQL_INTERVAL_YEAR_TO_MONTH) per i tipi di dati datetime e interval. Se questa colonna restituisce SQL_DATETIME o SQL_INTERVAL, il tipo di dati specifico può essere determinato dalla colonna SQL_DATETIME_SUB. Per un elenco dei tipi di dati SQL ODBC validi, vedere Tipi di dati SQL nell'Appendice D: Tipi di dati. Per informazioni sui tipi di dati SQL specifici del driver, vedere la documentazione del driver.

Tipi di dati restituiti per ODBC 3.x e ODBC 2.Le applicazioni x possono essere diverse. Per altre informazioni, vedere Compatibilità con le versioni precedenti e Conformità degli standard.
SQL_DATETIME_SUB (ODBC 3.0) 15 Smallint Codice del sottotipo per i tipi di dati datetime e interval. Per gli altri tipi di dati in questa colonna viene restituito NULL. Per altre informazioni sui codici secondari datetime e interval, vedere "SQL_DESC_DATETIME_INTERVAL_CODE" in SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Integer Lunghezza massima in byte di una colonna di tipo carattere o binario. Per gli tutti gli altri tipi di dati, il valore di questa colonna è NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Integer non NULL Posizione ordinale della colonna nella tabella. La prima colonna della tabella è il numero 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NO" se la colonna non include valori NULL.

"SÌ" se la colonna potrebbe includere valori NULL.

Quando non è noto se i valori Null sono supportati, in questa colonna viene restituita una stringa di lunghezza zero.

Per determinare il supporto di valori Null vengono seguite le regole ISO. In un sistema DBMS conforme a ISO SQL non vengono restituite stringhe vuote.

Il valore restituito per questa colonna è diverso dal valore restituito per la colonna NULLABLE. Vedere la descrizione della colonna NULLABLE.

Esempio di codice

Nell'esempio seguente un'applicazione dichiara buffer per il set di risultati restituito da SQLColumns. Chiama SQLColumns per restituire un set di risultati che descrive ogni colonna nella tabella EMPLOYEE. Chiama quindi SQLBindCol per associare le colonne nel set di risultati ai buffer. Infine, l'applicazione recupera ogni riga di dati con SQLFetch e la elabora.

// 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;  
        */  
      }  
   }  
}  
Per informazioni su Vedere
Associazione di un buffer a una colonna in un set di risultati Funzione SQLBindCol
Annullamento dell'elaborazione delle istruzioni Funzione SQLCancel
Restituzione dei privilegi per una colonna o colonne Funzione SQLColumnPrivileges
Recupero di un blocco di dati o scorrimento di un set di risultati Funzione SQLFetchScroll
Recupero di più righe di dati Funzione SQLFetch
Restituzione di colonne che identificano in modo univoco una riga o colonne aggiornate automaticamente da una transazione Funzione SQLSpecialColumns
Restituzione di statistiche e indici di tabella Funzione SQLStatistics
Restituzione di un elenco di tabelle in un'origine dati Funzione SQLTables
Restituzione dei privilegi per una tabella o una tabella Funzione SQLTablePrivileges

Vedi anche

Riferimento API ODBC
File di intestazione ODBC