Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Conformidade
Versão Introduzida: Conformidade com as Normas ODBC 1.0: Open Group
Summary
O SQLColumns devolve a lista de nomes de colunas em tabelas especificadas. O driver devolve esta informação como um conjunto de resultados no StatementHandle especificado.
Syntax
SQLRETURN SQLColumns(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Arguments
HandleStatement
[Entrada] Identificador do extrato.
Nome do Catálogo
[Entrada] Nome do catálogo. Se um driver suporta catálogos para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, uma string vazia ("") indica as tabelas que não têm catálogos.
O CatalogName não pode conter um padrão de pesquisa em cadeia de caracteres.
Note
Se o atributo da instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, CatalogName é tratado como identificador e o seu caso não é significativo. Se for SQL_FALSE, Nome do Catálogo é um argumento comum; É tratado literalmente, e o seu caso é significativo. Para mais informações, consulte Argumentos em Funções de Catálogo.
NomeComprimento1
[Entrada] Comprimento em caracteres de *NomeDeCatálogo.
Nome do esquema
[Entrada] Padrão de pesquisa de cadeias para nomes de esquemas. Se um driver suporta esquemas para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, uma cadeia vazia ("") indica aquelas tabelas que não têm esquemas.
Note
Se o atributo da instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, SchemaName é tratado como identificador e o seu caso não é significativo. Se for SQL_FALSE, Nome-Esquema é um argumento de valor de padrão; É tratado literalmente, e o seu caso é significativo.
NomeComprimento2
[Entrada] Comprimento em caracteres de *NomeEsquema.
TableName
[Entrada] Padrão de pesquisa de cadeias para nomes de tabelas.
Note
Se o atributo da instrução SQL_ATTR_METADATA_ID for definido como SQL_TRUE, TableName é tratado como identificador e o seu caso não é significativo. Se for SQL_FALSE, TableName é um argumento de valor de padrão; É tratado literalmente, e o seu caso é significativo.
NomeComprimento3
[Entrada] Comprimento em caracteres de *NomeTabela.
NomeDaColuna
[Entrada] Padrão de pesquisa de cadeia de caracteres para nomes de coluna.
Note
Se o atributo de instrução SQL_ATTR_METADATA_ID estiver definido como SQL_TRUE, ColumnName será tratada como um identificador e seu caso não será significativo. Se for SQL_FALSE, ColumnName é um argumento de valor padrão; é tratado literalmente, e o seu caso é significativo.
NomeComprimento4
[Entrada] Comprimento em caracteres de *ColumnName.
Devoluções
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnósticos
Quando o SQLColumns retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela seguinte lista os valores SQLSTATE normalmente devolvidos pelo SQLColumns e explica cada um no contexto desta função; a notação "(DM)" precede as descrições dos SQLSTATEs devolvidas pelo Gestor de Drivers. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, salvo indicação em contrário.
| SQLSTATE | Erro | Descrição |
|---|---|---|
| 01000 | Aviso geral | Mensagem informativa específica para o condutor. (Função devolve SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Falha da ligação de comunicação | A ligação de comunicação entre o driver e a fonte de dados à qual o driver estava ligado falhou antes de a função concluir o processamento. |
| 24000 | Estado do cursor inválido | Um cursor estava aberto no StatementHandle, e SQLFetch ou SQLFetchScroll tinham sido chamados. Este erro é devolvido pelo Gestor de Drivers se SQLFetch ou SQLFetchScroll não tiverem devolto SQL_NO_DATA, e é devolvido pelo driver se SQLFetch ou SQLFetchScroll tiverem devolvido SQL_NO_DATA. Um cursor estava aberto no HandleStatement , mas SQLFetch ou SQLFetchScroll não tinham sido chamados. |
| 40001 | Falha de serialização | A transação foi revertida devido a um bloqueio de recursos com outra transação. |
| 40003 | Conclusão da afirmação desconhecida | A ligação associada falhou durante a execução desta função, e o estado da transação não pode ser determinado. |
| HY000 | Erro geral | Ocorreu um erro para o qual não existia um SQLSTATE específico e para o qual não estava definido nenhum SQLSTATE específico da implementação. A mensagem de erro devolvida pelo SQLGetDiagRec no buffer *MessageText descreve o erro e a sua causa. |
| HY001 | Erro de alocação de memória | O controlador não conseguiu alocar a memória necessária para suportar a execução ou conclusão da função. |
| HY008 | Operação cancelada | O processamento assíncrono foi ativado para o StatementHandle. A função era chamada e, antes de terminar a execução, o SQLCancel ou SQLCancelHandle era chamado no StatementHandle. Depois, a função era chamada novamente no StatementHandle. A função era chamada e, antes de terminar a execução, o SQLCancel ou SQLCancelHandle era chamado no StatementHandle a partir de um thread diferente numa aplicação multithread. |
| HY009 | Uso inválido do ponteiro nulo | O atributo da instrução SQL_ATTR_METADATA_ID foi definido como SQL_TRUE, o argumento CatalogName era um ponteiro nulo, e o SQL_CATALOG_NAME InfoType devolve que os nomes de catálogo são suportados. (DM) O atributo da instrução SQL_ATTR_METADATA_ID era definido como SQL_TRUE, e o argumento NomeEsquema, NomeTabela ou Nome da Coluna era um ponteiro nulo. |
| HY010 | Erro de sequência de funções | (DM) Uma função de execução assíncrona era chamada para o handle de ligação associado ao StatementHandle. Esta função assíncrona ainda estava a ser executada quando a função SQLColumns foi chamada. (DM) SQLExecute, SQLExecDirect ou SQLMoreResults era chamado para o StatementHandle e devolvido SQL_PARAM_DATA_AVAILABLE. Esta função era chamada antes de os dados serem recuperados para todos os parâmetros transmitidos. (DM) Uma função de execução assíncrona (não esta) era chamada para o StatementHandle e continuava a ser executada quando esta função era chamada. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos era chamado para o StatementHandle e devolvido SQL_NEED_DATA. Esta função era chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados na execução. |
| HY013 | Erro de gestão de memória | A chamada de função não podia ser processada porque os objetos de memória subjacentes não podiam ser acedidos, possivelmente devido a condições de baixa memória. |
| HY090 | Comprimento inválido da corda ou do buffer | (DM) O valor de um dos argumentos do comprimento do nome era menor que 0, mas não igual a SQL_NTS. |
| O valor de um dos argumentos do comprimento do nome excedia o valor máximo de comprimento para o catálogo ou nome correspondente. O comprimento máximo de cada catálogo ou nome pode ser obtido chamando SQLGetInfo com os valores InfoType . (Ver "Comentários.") | ||
| HY117 | A ligação é suspensa devido ao estado desconhecido da transação. Apenas funções de desconexão e de leitura são permitidas. | (DM) Para mais informações sobre o estado suspenso, veja Função SQLEndTran. |
| HYC00 | Funcionalidade opcional não implementada | Foi especificado um nome de catálogo, e o driver ou fonte de dados não suporta catálogos. Foi especificado um nome de esquema, e o driver ou fonte de dados não suporta esquemas. Foi especificado um padrão de pesquisa em cadeia para o nome do esquema, nome da tabela ou nome da coluna, e a fonte de dados não suporta padrões de pesquisa para um ou mais desses argumentos. A combinação das definições atuais dos atributos SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE da instrução não era suportada pelo driver ou pela fonte de dados. O atributo da instrução SQL_ATTR_USE_BOOKMARKS foi definido para SQL_UB_VARIABLE, e o atributo da instrução SQL_ATTR_CURSOR_TYPE foi definido para um tipo de cursor para o qual o driver não suporta favoritos. |
| HYT00 | O tempo limite expirou | O período de tempo de espera da consulta expirava antes de a fonte de dados devolver o conjunto de resultados. O período de tempo é definido através do SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Expirou o tempo limite de ligação | O período de timeout da ligação expirou antes de a fonte de dados responder ao pedido. O período de tempo de expiração da ligação é definido através do SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | O driver não suporta esta função | (DM) O driver associado ao StatementHandle não suporta a função. |
| IM017 | A sondagem está desativada no modo de notificação assíncrona | Sempre que o modelo de notificação é utilizado, o sonding é desativado. |
| IM018 | O SQLCompleteAsync não foi chamado para completar a operação assíncrona anterior neste handle. | Se a chamada de função anterior no handle devolver SQL_STILL_EXECUTING e se o modo de notificação estiver ativado, o SQLCompleteAsync deve ser chamado no handle para fazer o pós-processamento e completar a operação. |
Comments
Esta função é normalmente usada antes da execução da instrução para recuperar informação sobre colunas para uma tabela ou tabelas do catálogo da fonte de dados. O SQLColumns pode ser usado para recuperar dados de todos os tipos de itens devolvidos pelo SQLTables. Para além das tabelas base, isto pode incluir (mas não se limita a) vistas, sinónimos, tabelas do sistema, e assim por diante. Em contraste, as funções SQLColAttribute e SQLDescribeCol descrevem as colunas num conjunto de resultados e a função SQLNumResultCols devolve o número de colunas num conjunto de resultados. Para mais informações, consulte Utilizações dos Dados de Catálogo.
Note
Para mais informações sobre o uso geral, argumentos e dados devolvidos das funções de catálogo ODBC, consulte Funções de Catálogo.
O SQLColumns devolve os resultados como um conjunto padrão de resultados, ordenado por TABLE_CAT, TABLE_SCHEM, TABLE_NAME e ORDINAL_POSITION.
Note
Quando uma aplicação funciona com um ODBC 2. driver x , nenhuma coluna de ORDINAL_POSITION é devolvida no conjunto de resultados. Como resultado, ao trabalhar com ODBC 2. x drivers, a ordem das colunas na lista de colunas devolvida pelo SQLColumns não é necessariamente a mesma que a ordem das colunas devolvidas quando a aplicação executa uma instrução SELECT em todas as colunas dessa tabela.
Note
O SQLColumns pode não devolver todas as colunas. Por exemplo, um driver pode não devolver informação sobre pseudo-colunas, como o Oracle ROWID. As aplicações podem usar qualquer coluna válida, quer seja devolvida por SQLColumns.
Algumas colunas que podem ser devolvidas por SQLStatistics não são devolvidas por SQLColumns. Por exemplo, o SQLColumns não devolve as colunas de um índice criado sobre uma expressão ou filtro, como SALARY + BENEFITS ou DEPT = 0012.
Os comprimentos das colunas VARCHAR não estão indicados na tabela; Os comprimentos reais dependem da fonte de dados. Para determinar os comprimentos reais das colunas TABLE_CAT, TABLE_SCHEM, TABLE_NAME e COLUMN_NAME, uma aplicação pode chamar SQLGetInfo com as opções SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN e SQL_MAX_COLUMN_NAME_LEN.
As colunas seguintes foram renomeadas para ODBC 3. x. As alterações no nome das colunas não afetam a compatibilidade retroativa porque as aplicações associam por número de coluna.
| Coluna ODBC 2.0 | ODBC 3. Coluna X |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| PROPRIETÁRIO_DA_TABELA | TABLE_SCHEM |
| PRECISÃO | TAMANHO_DA_COLUNA |
| LENGTH | BUFFER_LENGTH |
| ESCALA | DÍGITOS_DECIMAIS |
| RADIX | NUM_PREC_RADIX |
As colunas seguintes foram adicionadas ao conjunto de resultados devolvido pelo SQLColumns para o ODBC 3. x:
CHAR_OCTET_LENGTH
COLUMN_DEF
É_NULO
POSIÇÃO_ORDINAL
SQL_DATA_TYPE
SQL_DATETIME_SUB
A tabela seguinte lista as colunas do conjunto de resultados. Colunas adicionais para além da coluna 18 (IS_NULLABLE) podem ser definidas pelo driver. Uma aplicação deve aceder a colunas específicas do driver contando decrescentemente a partir do final do conjunto de resultados em vez de especificar uma posição ordinal explícita. Para mais informações, consulte Dados Devolvidos por Funções de Catálogo.
| Nome da coluna | Column number |
Tipo de dados | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Nome do catálogo; NULL se não for aplicável à fonte de dados. Se um driver suportar catálogos para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, devolve uma string vazia ("") para as tabelas que não têm catálogos. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Nome do esquema; NULL se não for aplicável à fonte de dados. Se um controlador suportar esquemas para algumas tabelas mas não para outras, como quando recupera dados de diferentes SGBD, devolve uma cadeia vazia ("") para as tabelas que não têm esquemas. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar não NULL | Nome da tabela. |
| COLUMN_NAME (ODBC 1.0) | 4 | Varchar não NULL | Nome da coluna. O driver devolve uma cadeia vazia para uma coluna que não tem nome. |
| DATA_TYPE (ODBC 1.0) | 5 | Smallint not NULL | Tipo de dados SQL. Isto pode ser um tipo de dado SQL ODBC ou um tipo de dado SQL específico do driver. Para os tipos de dados data-hora e intervalo, esta coluna devolve o tipo de dado conciso (como SQL_TYPE_DATE ou SQL_INTERVAL_YEAR_TO_MONTH, em vez do tipo de dados não conciso como SQL_DATETIME ou SQL_INTERVAL). Para uma lista de tipos de dados válidos ODBC SQL, consulte Tipos de Dados SQL no Apêndice D: Tipos de Dados. Para informações sobre tipos de dados SQL específicos de cada driver, consulte a documentação do driver. Os tipos de dados devolvidos para o ODBC 3. x e ODBC 2. As aplicações X podem ser diferentes. Para mais informações, consulte Compatibilidade Retroactiva e Conformidade de Normas. |
| TYPE_NAME (ODBC 1.0) | 6 | Varchar não NULL | Nome do tipo de dado dependente da fonte de dados; por exemplo, "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" ou "CHAR ( ) PARA DADOS DE BITS". |
| COLUMN_SIZE (ODBC 1.0) | 7 | Integer | Se DATA_TYPE for SQL_CHAR ou SQL_VARCHAR, esta coluna contém o comprimento máximo em caracteres da coluna. Para tipos de dados data-hora, este é o número total de caracteres necessários para mostrar o valor quando é convertido em caracteres. Para tipos de dados numéricos, isto é ou o número total de dígitos ou o número total de bits permitidos na coluna, de acordo com a coluna NUM_PREC_RADIX. Para tipos de dados de intervalo, este é o número de caracteres na representação de caracteres do literal do intervalo (conforme definido pela precisão que lidera o intervalo, veja Comprimento do Tipo de Dados de Intervalo no Apêndice D: Tipos de Dados). Para mais informações, consulte Tamanho da Coluna, Dígitos Decimais, Comprimento do Octeto de Transferência e Tamanho do Ecrã no Apêndice D: Tipos de Dados. |
| BUFFER_LENGTH (ODBC 1.0) | 8 | Integer | O comprimento em bytes dos dados transferidos numa operação SQLGetData, SQLFetch ou SQLFetchScroll, se SQL_C_DEFAULT for especificado. Para dados numéricos, este tamanho pode diferir do tamanho dos dados armazenados na fonte de dados. Este valor pode diferir de COLUMN_SIZE coluna para dados de caracteres. Para mais informações sobre o comprimento, consulte Tamanho da Coluna, Dígitos Decimais, Comprimento do Octeto de Transferência e Tamanho do Ecrã no Apêndice D: Tipos de Dados. |
| DECIMAL_DIGITS (ODBC 1.0) | 9 | Smallint | O número total de dígitos significativos à direita do ponto decimal. Para SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP, esta coluna contém o número de dígitos no componente de frações de segundos. Para os outros tipos de dados, estes são os dígitos decimais da coluna na fonte de dados. Para tipos de dados de intervalo que contêm um componente temporal, esta coluna contém o número de dígitos à direita do ponto decimal (frações de segundos). Para tipos de dados de intervalo que não contêm um componente temporal, esta coluna é 0. Para mais informações sobre dígitos decimais, consulte Tamanho da Colunha, Dígitos Decimais, Comprimento do Octeto de Transferência e Tamanho do Ecrã no Apêndice D: Tipos de Dados. NULL é devolvido para tipos de dados onde DECIMAL_DIGITS não é aplicável. |
| NUM_PREC_RADIX (ODBC 1.0) | 10 | Smallint | Para tipos de dados numéricos, 10 ou 2. Se for 10, os valores em COLUMN_SIZE e DECIMAL_DIGITS indicam o número de dígitos decimais permitidos para a coluna. Por exemplo, uma coluna DECIMAL(12,5) retornaria um NUM_PREC_RADIX de 10, um COLUMN_SIZE de 12 e um DECIMAL_DIGITS de 5; uma coluna FLOAT pode retornar um NUM_PREC_RADIX de 10, um COLUMN_SIZE de 15 e um DECIMAL_DIGITS de NULL. Se for 2, os valores em COLUMN_SIZE e DECIMAL_DIGITS indicam o número de bits permitidos na coluna. Por exemplo, uma coluna FLOAT poderia devolver um RADIX de 2, um COLUMN_SIZE de 53 e um DECIMAL_DIGITS de NULL. NULL é retornado para tipos de dados onde NUM_PREC_RADIX não é aplicável. |
| NULLABLE (ODBC 1.0) | 11 | Smallint not NULL | SQL_NO_NULLS se a coluna não pudesse incluir valores NULL. SQL_NULLABLE se a coluna aceitar valores NULL. SQL_NULLABLE_UNKNOWN se não se sabe se a coluna aceita valores NULL. O valor devolvido para esta coluna difere do valor devolvido para a coluna IS_NULLABLE. A coluna NULLABLE indica com certeza que uma coluna pode aceitar NULLs, mas não pode indicar com certeza que uma coluna não aceita NULLs. A coluna IS_NULLABLE indica com certeza que uma coluna não pode aceitar NULLs, mas não pode indicar com certeza que uma coluna aceita NULLs. |
| OBSERVAÇÕES (ODBC 1.0) | 12 | Varchar | Uma descrição da coluna. |
| COLUMN_DEF (ODBC 3.0) | 13 | Varchar | O valor padrão da coluna. O valor nesta coluna deve ser interpretado como uma cadeia se estiver incluído entre aspas. Se NULL foi especificado como o valor padrão, esta coluna é a palavra NULL, não entre aspas. Se o valor padrão não puder ser representado sem truncamento, esta coluna contém TRUNCADO, sem aspas isoladas. Se nenhum valor padrão foi especificado, esta coluna é NULL. O valor de COLUMN_DEF pode ser usado para gerar uma nova definição de coluna, exceto quando contém o valor TRUNCADO. |
| SQL_DATA_TYPE (ODBC 3.0) | 14 | Smallint not NULL | Tipo de dados SQL, tal como aparece no campo de registo SQL_DESC_TYPE no IRD. Isto pode ser um tipo de dado SQL ODBC ou um tipo de dado SQL específico do driver. Esta coluna é igual à coluna DATA_TYPE, exceto para os tipos de dados datetime e interval. Esta coluna devolve o tipo de dados não conciso (como SQL_DATETIME ou SQL_INTERVAL), em vez do tipo de dados conciso (como SQL_TYPE_DATE ou SQL_INTERVAL_YEAR_TO_MONTH) para os tipos de data, hora e intervalo. Se esta coluna devolver SQL_DATETIME ou SQL_INTERVAL, o tipo de dado específico pode ser determinado a partir da coluna SQL_DATETIME_SUB. Para uma lista de tipos de dados válidos ODBC SQL, consulte Tipos de Dados SQL no Apêndice D: Tipos de Dados. Para informações sobre tipos de dados SQL específicos de cada driver, consulte a documentação do driver. Os tipos de dados devolvidos para o ODBC 3. x e ODBC 2. As aplicações X podem ser diferentes. Para mais informações, consulte Compatibilidade Retroactiva e Conformidade de Normas. |
| SQL_DATETIME_SUB (ODBC 3.0) | 15 | Smallint | O código de subtipo para os tipos de dados datetime e interval. Para outros tipos de dados, esta coluna retorna um NULL. Para mais informações sobre subcódigos de data-hora e intervalo, consulte "SQL_DESC_DATETIME_INTERVAL_CODE" em SQLSetDescField. |
| CHAR_OCTET_LENGTH (ODBC 3.0) | 16 | Integer | O comprimento máximo em bytes de um caractere ou coluna de tipo de dados binário. Para todos os outros tipos de dados, esta coluna retorna um NULL. |
| ORDINAL_POSITION (ODBC 3.0) | 17 | Inteiro não NULL | A posição ordinal da coluna na tabela. A primeira coluna da tabela é a número 1. |
| IS_NULLABLE (ODBC 3.0) | 18 | Varchar | "NÃO" se a coluna não incluir NULLs. "SIM" se a coluna pudesse incluir NULLs. Esta coluna devolve uma cadeia de comprimento zero se a nulidade for desconhecida. As regras ISO são seguidas para determinar a nulidade. Um DBMS compatível com ISO SQL não pode retornar uma cadeia de caracteres vazia. O valor devolvido para esta coluna difere do valor devolvido para a coluna NULLABLE. (Veja a descrição da coluna NULLABLE.) |
Exemplo de código
No exemplo seguinte, uma aplicação declara buffers para o conjunto de resultados devolvido pelo SQLColumns. Chama SQLColumns para devolver um conjunto de resultados que descreve cada coluna da tabela EMPLOYEE. Depois chama SQLBindCol para associar as colunas do conjunto de resultados aos buffers. Finalmente, a aplicação recolhe cada linha de dados com SQLFetch e processa-os.
// 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;
*/
}
}
}
Funções relacionadas
| Para obter informações sobre | Veja |
|---|---|
| Ligar um buffer a uma coluna num conjunto de resultados | Função SQLBindCol |
| Cancelamento do processamento de extratos | Função SQLCancel |
| Devolução de privilégios para uma ou mais colunas | Função SQLColumnPrivileges |
| Buscar um bloco de dados ou percorrer um conjunto de resultados | Função SQLFetchScroll |
| Obtenção de várias linhas de dados | Função SQLFetch |
| Colunas de retorno que identificam de forma única uma linha, ou colunas atualizadas automaticamente por uma transação | Função SQLSpecialColumns |
| Estatísticas e índices de tabela de retorno | Função SQLStatistics |
| Devolver uma lista de tabelas numa fonte de dados | Função SQLTables |
| Devolução de privilégios para uma tabela ou tabelas | Função SQLTablePrivileges |