Funzione SQLColumns

Conformità
Versione introdotta: Conformità agli Standard ODBC 1.0: Open Group

Sommario
SQLColumns restituisce l'elenco dei nomi delle colonne in tabelle specificate. Il driver restituisce queste informazioni come set di risultati sull'StatementHandle specificato.

Sintassi

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

Arguments

StatementHandle
[Input] Handle di istruzione.

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

Note

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

NameLength1
[Input] Lunghezza nei caratteri di *NomeCatalogo.

SchemaName
[Input] Pattern di ricerca stringa per i nomi degli schemi. Se un driver supporta gli schemi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, una stringa vuota ("") indica quelle tabelle che non hanno schema.

Note

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, SchemaName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, Nome dello schema è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo.

NameLength2
[Input] Lunghezza nei caratteri di *NomeSchema.

TableName
[Input] Pattern di ricerca stringa per i nomi delle tabelle.

Note

Se l'attributo della SQL_ATTR_METADATA_ID istruzione è impostato su SQL_TRUE, TableName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, TableName è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo.

NameLength3
[Input] Lunghezza nei caratteri di *NomeTabella.

ColumnName
[Input] Pattern di ricerca stringa per i nomi delle colonne.

Note

Se l'attributo SQL_ATTR_METADATA_ID istruzione è impostato su SQL_TRUE, ColumnName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, ColumnName è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo.

NameLength4
[Input] Lunghezza in caratteri di *NomeColonna.

Returns

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, un valore SQLSTATE associato può essere ottenuto chiamando SQLGetDiagRec con un HandleType di SQL_HANDLE_STMT e un Handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE tipicamente restituiti da SQLColumns e li spiega nel contesto di questa funzione; la notazione "(DM)" precede le descrizioni degli stati SQL restituite dal Driver Manager. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Error Description
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 Un cursore era aperto sull'InstructionHandle, e erano stati chiamati 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.

Un cursore era aperto sull'InstructionHandle ma SQLFetch o SQLFetchScroll non erano stati chiamati.
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 SQL_ATTR_METADATA_ID istruzione era impostato su SQL_TRUE, l'argomento CatalogName era un puntatore nullo e l'InfoType SQL_CATALOG_NAME restituisce che i nomi dei cataloghi sono supportati.

(DM) L'attributo SQL_ATTR_METADATA_ID istruzione era impostato su SQL_TRUE, e l'argomento SchemaName, TableName o ColumnName era un puntatore nullo.
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 veniva 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 della lunghezza del nome era inferiore a 0 ma non uguale a SQL_NTS.
Il valore di uno degli argomenti sulla lunghezza del nome superava il valore massimo della lunghezza per il corrispondente catalogo o nome. La lunghezza massima di ogni catalogo o nome può essere ottenuta chiamando SQLGetInfo con i valori 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, ma il driver o la fonte dati non supportano i cataloghi.

È stato specificato un nome di schema e il driver o la fonte dati non supportano gli schemi.

È stato specificato un pattern di ricerca a stringhe per il nome dello schema, il nome della tabella o il nome della colonna, e la sorgente dati non supporta i pattern 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 Il 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.

Comments

Questa funzione viene tipicamente utilizzata prima dell'esecuzione dell'istruzione per recuperare informazioni sulle colonne di una tabella o delle tabelle dal catalogo della fonte dati. SQLColumns può essere utilizzato per recuperare dati per tutti i tipi di elementi restituiti da SQLTables. Oltre alle tabelle base, questo può includere (ma non è limitato a) viste, sinonimi, tabelle di sistema e così via. Al contrario, le funzioni SQLColAttribute e SQLDescribeCol descrivono le colonne in un insieme di risultati e la funzione SQLNumResultCols restituisce il numero di colonne in un insieme di risultati. Per altre informazioni, vedere Usi dei dati del catalogo.

Note

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 un insieme standard, ordinato da TABLE_CAT, TABLE_SCHEM, TABLE_NAME e ORDINAL_POSITION.

Note

Quando un'applicazione funziona con un ODBC 2. driver x , nessuna colonna ORDINAL_POSITION viene restituita nell'insieme dei risultati. Di conseguenza, quando si lavora con ODBC 2. x drivers, l'ordine delle colonne nella lista di colonne restituite da SQLColumns non è necessariamente lo stesso dell'ordine delle colonne restituite quando l'applicazione esegue un'istruzione SELECT su tutte le colonne di quella tabella.

Note

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

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

Le lunghezze delle colonne VARCHAR non sono indicate nella tabella; Le lunghezze effettive dipendono dalla fonte dei dati. Per determinare la lunghezza effettiva 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 seguenti colonne sono state rinominate in ODBC 3. x. I cambiamenti nel nome delle colonne non influiscono sulla retrocompatibilità perché le applicazioni si assegnano per numero di colonna.

Colonna ODBC 2.0 ODBC 3. Colonna X
TABLE_QUALIFIER TABLE_CAT
PROPRIETARIO_TABELLA TABLE_SCHEM
PRECISION COLUMN_SIZE
Lunghezza BUFFER_LENGTH
SCALA CIFRE_DECIMALI
RADIX NUM_PREC_RADIX

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

lunghezza in ottetti di carattere
COLUMN_DEF

IS_NULLABLE
ORDINAL_POSITION

Tipo_di_dato_SQL
SQL_DATETIME_SUB

Nella tabella seguente sono elencate le colonne nel set di risultati. Colonne aggiuntive oltre la 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 della colonna Column

Numero
Tipo di dati Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Nome del catalogo; NULL se non applicabile alla fonte dati. Se un driver supporta cataloghi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, restituisce una stringa vuota ("") per quelle tabelle che non hanno cataloghi.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Nome dello schema; NULL se non applicabile alla fonte dati. Se un driver supporta gli schemi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, restituisce una stringa vuota ("") per quelle tabelle che non hanno schemi.
TABLE_NAME (ODBC 1.0) 3 Varchar non NULL Nome della 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 data-time e intervallo, questa colonna restituisce il tipo di dato conciso (come SQL_TYPE_DATE o SQL_INTERVAL_YEAR_TO_MONTH, invece del tipo di dato non conciso come 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.

I tipi di dati restituiti per ODBC 3. x e ODBC 2. Le applicazioni di 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 dato dipendente dalla sorgente dati; ad esempio, "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" o "CHAR ( ) PER DATI BIT".
COLUMN_SIZE (ODBC 1.0) 7 Intero Se DATA_TYPE è SQL_CHAR o SQL_VARCHAR, questa colonna contiene la lunghezza massima in caratteri della colonna. Per i tipi di dati datatime, questo è il numero totale di caratteri necessari per visualizzare il valore quando viene convertito in caratteri. Per i tipi di dati numerici, questo è o il numero totale di cifre o il numero totale di bit consentiti nella colonna, secondo la colonna NUM_PREC_RADIX. Per i tipi di dati a intervallo, questo è il numero di caratteri nella rappresentazione del letterale dell'intervallo (come definito dalla precisione di guida dell'intervallo, vedi Interval Data Type Length nell'Appendice D: Data Types). 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 Intero La lunghezza in byte dei dati trasferiti su un'operazione SQLGetData, SQLFetch o SQLFetchScroll, se specificata SQL_C_DEFAULT. Per i dati numerici, questa dimensione può differire dalla dimensione dei dati memorizzati sulla sorgente dati. Questo valore potrebbe differire da COLUMN_SIZE colonna per i dati dei caratteri. Per maggiori informazioni sulla lunghezza, vedi Dimensione della colonna, Cifre Decimali, Lunghezza dell'Ottetto di Trasferimento e Dimensione del Display nell'Appendice D: Tipi di Dati.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Il numero totale di cifre significative a destra del punto decimale. Per SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP, questa colonna contiene il numero di cifre nella componente dei secondi frazionari. Per gli altri tipi di dati, queste sono le cifre decimali della colonna sulla sorgente dati. Per i tipi di dati a intervalli che contengono una componente temporale, questa colonna contiene il numero di cifre a destra del punto decimale (secondi frazionari). Per i tipi di dati a intervallo che non contengono una componente temporale, questa colonna è 0. Per maggiori informazioni sulle cifre decimali, vedi Dimensione della colonna, Cifre decimali, Lunghezza dell'ottetto di trasferimento e Dimensione del display nell'Appendice D: Tipi di dati. NULL viene restituito 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 indicano 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 indicano il numero di bit consentiti nella colonna. Ad esempio, una colonna FLOAT poteva restituire un RADIX pari a 2, un COLUMN_SIZE a 53 e un DECIMAL_DIGITS a 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 potesse includere i 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 differisce da quello restituito per la colonna IS_NULLABLE. La colonna NULLABLE indica con certezza che una colonna può accettare NULL, ma non può indicare con certezza che una colonna non accetti NULL. La colonna IS_NULLABLE indica con certezza che una colonna non può accettare NULL, ma non può indicare con certezza che una colonna accetti NULL.
OSSERVAZIONI (ODBC 1.0) 12 Varchar Una descrizione della colonna.
COLUMN_DEF (ODBC 3.0) 13 Varchar Valore predefinito della colonna. Il valore in questa colonna deve essere interpretato come una 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 TRONCATO, senza includere 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 dato SQL, come appare nel campo SQL_DESC_TYPE record nell'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 dato non conciso (come SQL_DATETIME o SQL_INTERVAL), invece del tipo di dato conciso (come SQL_TYPE_DATE o SQL_INTERVAL_YEAR_TO_MONTH) per i tipi di data data, ora e intervallo. Se questa colonna restituisce SQL_DATETIME o SQL_INTERVAL, il tipo di dato 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.

I tipi di dati restituiti per ODBC 3. x e ODBC 2. Le applicazioni di 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 altri tipi di dati, questa colonna restituisce un valore NULL. Per maggiori informazioni sui sottocodici datetime e intervalli, vedi "SQL_DESC_DATETIME_INTERVAL_CODE" in SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Intero Lunghezza massima in byte di una colonna di tipo carattere o binario. Per tutti gli altri tipi di dati, questa colonna restituisce un valore NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Intero non NULL La posizione ordinale della colonna nella tabella. La prima colonna della tabella è la numero 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NO" se la colonna non include valori NULL.

"SÌ" se la colonna potesse includere 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. Un DBMS conforme a ISO SQL non può restituire una stringa vuota.

Il valore restituito per questa colonna differisce da quello restituito per la colonna NULLABLE. Vedere la descrizione della colonna NULLABLE.

Esempio di codice

Nel seguente esempio, 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 dell'insieme di risultati ai buffer. Infine, l'applicazione recupera ogni riga di dati con SQLFetch e li 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 Vedi
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
Restituire colonne che identificano in modo univoco una riga, o colonne aggiornate automaticamente da una transazione Funzione SQLSpecialColumns
Restituzione delle statistiche e indici delle tabelle Funzione SQLStatistics
Restituire un elenco di tabelle in una sorgente di dati Funzione SQLTables
Restituzione dei privilegi per una tabella o più tabelle Funzione SQLTablePrivileges