Поделиться через


SQLColumns, функция

Соответствия
Представлена версия: соответствие стандартам ODBC 1.0: open Group

Сводка
SQLColumns возвращает список имен столбцов в указанных таблицах. Драйвер возвращает эти сведения в виде результирующих наборов для указанного оператора StatementHandle.

Синтаксис

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

Аргументы

ОператорHandle
[Входные данные] Дескриптор инструкции.

Имя каталога
[Входные данные] Имя каталога. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют каталогов. CatalogName не может содержать шаблон поиска строк.

Заметка

Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, Имя каталога рассматривается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, CatalogName является обычным аргументом; он обрабатывается буквально, и его дело является значительным. Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.

NameLength1
[Входные данные] Длина символов *CatalogName.

Schemaname
[Входные данные] Шаблон поиска строк для имен схем. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют схем.

Заметка

Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, schemaName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, SchemaName является аргументом значения шаблона; он обрабатывается буквально, и его случай является значительным.

NameLength2
[Входные данные] Длина символов *SchemaName.

TableName
[Входные данные] Шаблон поиска строк для имен таблиц.

Заметка

Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, TableName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, TableName является аргументом значения шаблона; он обрабатывается буквально, и его случай является значительным.

NameLength3
[Входные данные] Длина символов *TableName.

ColumnName
[Входные данные] Шаблон поиска строк для имен столбцов.

Заметка

Если для атрибута оператора SQL_ATTR_METADATA_ID задано значение SQL_TRUE, ColumnName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, ColumnName является аргументом значения шаблона; он обрабатывается буквально, и его случай является значительным.

NameLength4
[Входные данные] Длина символов *ColumnName.

Возвраты

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR или SQL_INVALID_HANDLE.

Диагностика

Когда SQLColumns возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить путем вызова SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и handle of StatementHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращаются SQLColumns и объясняются каждый из них в контексте этой функции. Нотация "(DM)" предшествует описаниям SQLSTATEs, возвращаемым диспетчером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.

SQLSTATE Error Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
08S01 Сбой связи Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции.
24000 Недопустимое состояние курсора Курсор был открыт на операторе StatementHandle, и был вызван SQLFetch или SQLFetchScroll . Эта ошибка возвращается диспетчером драйверов, если SQLFetch или SQLFetchScroll не вернул SQL_NO_DATA и возвращается драйвером, если SQLFetch или SQLFetchScroll вернул SQL_NO_DATA.

Курсор был открыт на ОператорHandle , но SQLFetch или SQLFetchScroll не был вызван.
40001 Сбой сериализации Транзакция была откатена из-за взаимоблокировки ресурсов с другой транзакцией.
40003 Неизвестное завершение инструкции Связанное соединение завершилось сбоем во время выполнения этой функции, и состояние транзакции невозможно определить.
HY000 Общая ошибка Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY008 Операция отменена Асинхронная обработка была включена для ОператораHandle. Функция была вызвана и до завершения выполнения, SQLCancel или SQLCancelHandle была вызвана на ОператорHandle. Затем функция снова была вызвана на ОператорHandle.

Функция была вызвана и до завершения выполнения SQLCancel или SQLCancelHandle была вызвана оператором StatementHandle из другого потока в многопотоковом приложении.
HY009 Недопустимое использование указателя NULL Для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, аргумент CatalogName был пустым указателем, а SQL_CATALOG_NAME InfoType возвращает поддерживаемые имена каталогов.

(DM) Атрибут инструкции SQL_ATTR_METADATA_ID был задан как SQL_TRUE, а аргумент SchemaName, TableName или ColumnName был пустым указателем.
HY010 Ошибка последовательности функций (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция по-прежнему выполнялась при вызове функции SQLColumns .

(DM) SQLExecute, SQLExecDirect или SQLMoreResults был вызван для ОператораHandle и возвращен SQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.

(DM) асинхронно выполняющаяся функция (не эта) была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle и возвращены SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY090 Недопустимая длина строки или буфера (DM) Значение одного из аргументов длины имени было меньше 0, но не равно SQL_NTS.
Значение одного из аргументов длины имени превысило максимальное значение длины соответствующего каталога или имени. Максимальная длина каждого каталога или имени может быть получена путем вызова SQLGetInfo со значениями InfoType . (См. комментарии.)
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function.
HYC00 Необязательный компонент не реализован Было указано имя каталога, а драйвер или источник данных не поддерживает каталоги.

Было указано имя схемы, а драйвер или источник данных не поддерживает схемы.

Шаблон поиска строк был указан для имени схемы, имени таблицы или имени столбца, а источник данных не поддерживает шаблоны поиска для одного или нескольких этих аргументов.

Сочетание текущих параметров SQL_ATTR_CONCURRENCY и атрибутов инструкции SQL_ATTR_CURSOR_TYPE не поддерживается драйвером или источником данных.

Для атрибута инструкции SQL_ATTR_USE_BOOKMARKS задано значение SQL_UB_VARIABLE, а для атрибута инструкции SQL_ATTR_CURSOR_TYPE задан тип курсора, для которого драйвер не поддерживает закладки.
HYT00 Время ожидания истекло. Срок ожидания запроса истек, прежде чем источник данных вернул результирующий набор. Период времени ожидания задается через SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с StatementHandle , не поддерживает функцию.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции с этим дескриптором. Если предыдущий вызов функции дескриптора возвращает SQL_STILL_EXECUTING и если включен режим уведомлений, sqlCompleteAsync должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.

Комментарии

Эта функция обычно используется перед выполнением инструкции для получения сведений о столбцах таблицы или таблиц из каталога источника данных. SQLColumns можно использовать для получения данных для всех типов элементов, возвращаемых SQLTables. Помимо базовых таблиц, это может включать (но не ограничивается) представлениями, синонимами, системными таблицами и т. д. Напротив, функции SQLColAttribute и SQLDescribeCol описывают столбцы в результирующем наборе, а функция SQLNumResultCols возвращает количество столбцов в результирующем наборе. Дополнительные сведения см. в разделе "Использование данных каталога".

Заметка

Дополнительные сведения об общем использовании, аргументах и возвращаемых данных функций каталога ODBC см. в разделе "Функции каталога".

SQLColumns возвращает результаты в виде стандартного результирующий набор, упорядоченный по TABLE_CAT, TABLE_SCHEM, TABLE_NAME и ORDINAL_POSITION.

Заметка

Когда приложение работает с ODBC 2.Драйвер x , столбец ORDINAL_POSITION не возвращается в результирующем наборе. В результате при работе с ODBC 2.Драйверы x, порядок столбцов в списке столбцов, возвращаемых SQLColumns, не обязательно совпадает с порядком столбцов, возвращаемых при выполнении инструкции SELECT для всех столбцов в этой таблице.

Заметка

SQLColumns может не возвращать все столбцы. Например, драйвер может не возвращать сведения о псевдоколонок, таких как Oracle ROWID. Приложения могут использовать любой допустимый столбец, возвращается ли он SQLColumns.

Некоторые столбцы, которые могут быть возвращены SQLStatistics , не возвращаются SQLColumns. Например, SQLColumns не возвращает столбцы в индексе, созданном для выражения или фильтра, например ЗАРПЛАТА + ПРЕИМУЩЕСТВА или DEPT = 0012.

Длина столбцов VARCHAR не отображается в таблице; фактические длины зависят от источника данных. Чтобы определить фактическую длину столбцов TABLE_CAT, TABLE_SCHEM, TABLE_NAME и COLUMN_NAME, приложение может вызывать SQLGetInfo с параметрами SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN и SQL_MAX_COLUMN_NAME_LEN.

Следующие столбцы были переименованы для ODBC 3.x. Изменения имени столбца не влияют на обратную совместимость, так как приложения привязываются по номеру столбца.

Столбец ODBC 2.0 ODBC 3.Столбец x
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
PRECISION COLUMN_SIZE
LENGTH BUFFER_LENGTH
МАСШТАБ DECIMAL_DIGITS
RADIX NUM_PREC_RADIX

Следующие столбцы были добавлены в результирующий набор, возвращаемый SQLColumns для ODBC 3.x:

CHAR_OCTET_LENGTH
COLUMN_DEF

IS_NULLABLE
ORDINAL_POSITION

SQL_DATA_TYPE
SQL_DATETIME_SUB

В следующей таблице перечислены столбцы в результирующем наборе. Дополнительные столбцы за пределами столбца 18 (IS_NULLABLE) можно определить драйвером. Приложение должно получить доступ к столбцам для конкретного драйвера, отсчитывая от конца результирующего набора вместо указания явной порядковой позиции. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".

Столбец Column

Номер
Тип данных Комментарии
TABLE_CAT (ODBC 1.0) 1 Varchar Имя каталога; ЗНАЧЕНИЕ NULL, если применимо к источнику данных. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют каталогов.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Имя схемы; ЗНАЧЕНИЕ NULL, если применимо к источнику данных. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют схем.
TABLE_NAME (ODBC 1.0) 3 Varchar не NULL Имя таблицы.
COLUMN_NAME (ODBC 1.0) 4 Varchar не NULL Имя столбца. Драйвер возвращает пустую строку для столбца, который не имеет имени.
DATA_TYPE (ODBC 1.0) 5 Smallint, не NULL Тип данных SQL. Это может быть тип данных ODBC SQL или тип данных SQL для конкретного драйвера. Для типов данных datetime и интервала этот столбец возвращает краткий тип данных (например, SQL_TYPE_DATE или SQL_INTERVAL_YEAR_TO_MONTH, а не не тип данных, например SQL_DATETIME или SQL_INTERVAL). Список допустимых типов данных ODBC SQL см . в разделе "Типы данных SQL" в приложении D: Типы данных. Сведения о типах данных SQL для конкретного драйвера см. в документации по драйверу.

Типы данных, возвращаемые для ODBC 3.x и ODBC 2.Приложения x могут отличаться. Дополнительные сведения см. в разделе "Обратная совместимость" и "Соответствие стандартам".
TYPE_NAME (ODBC 1.0) 6 Varchar не NULL Имя типа данных, зависящей от источника данных; например, CHAR, VARCHAR, MONEY, LONG VARBINAR или CHAR () FOR BIT DATA.
COLUMN_SIZE (ODBC 1.0) 7 Целое Если DATA_TYPE SQL_CHAR или SQL_VARCHAR, этот столбец содержит максимальную длину в символах столбца. Для типов данных datetime это общее количество символов, необходимых для отображения значения при преобразовании в символы. Для числовых типов данных это общее число цифр или общее число битов, разрешенных в столбце, в соответствии с столбцом NUM_PREC_RADIX. Для типов данных интервала это число символов в символьном представлении литерала интервала (как определено начальной точностью интервала, см . раздел "Длина типа данных интервала" в приложении D: Типы данных). Дополнительные сведения см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных.
BUFFER_LENGTH (ODBC 1.0) 8 Целое Длина в байтах данных, передаваемых в операции SQLGetData, SQLFetch или SQLFetchScroll, если указана SQL_C_DEFAULT. Для числовых данных этот размер может отличаться от размера данных, хранящихся в источнике данных. Это значение может отличаться от столбца COLUMN_SIZE для символьных данных. Дополнительные сведения о длине см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Общее число значимых цифр справа от десятичной запятой. Для SQL_TYPE_TIME и SQL_TYPE_TIMESTAMP этот столбец содержит количество цифр в компоненте дробных секунд. Для других типов данных это десятичные цифры столбца в источнике данных. Для типов данных интервала, содержащих компонент времени, этот столбец содержит число цифр справа от десятичной точки (дробные секунды). Для типов данных интервала, не содержащих компонент времени, этот столбец равен 0. Дополнительные сведения о десятичных цифрах см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных. Значение NULL возвращается для типов данных, в которых DECIMAL_DIGITS неприменимо.
NUM_PREC_RADIX (ODBC 1.0) 10 Smallint Для числовых типов данных — 10 или 2. Если значение равно 10, значения в COLUMN_SIZE и DECIMAL_DIGITS дать число десятичных цифр, разрешенных для столбца. Например, столбец DECIMAL(12,5) возвращает NUM_PREC_RADIX 10, COLUMN_SIZE 12 и DECIMAL_DIGITS из 5; Столбец FLOAT может возвращать NUM_PREC_RADIX 10, COLUMN_SIZE 15 и DECIMAL_DIGITS NULL.

Если значение равно 2, значения в COLUMN_SIZE и DECIMAL_DIGITS дать количество битов, разрешенных в столбце. Например, столбец FLOAT может возвращать RADIX 2, COLUMN_SIZE 53 и DECIMAL_DIGITS NULL.

Значение NULL возвращается для типов данных, в которых NUM_PREC_RADIX неприменимо.
NULLABLE (ODBC 1.0) 11 Smallint, не NULL SQL_NO_NULLS, если столбец не может содержать значения NULL.

SQL_NULLABLE, если столбец принимает значения NULL.

SQL_NULLABLE_UNKNOWN, если столбец не принимает значения NULL.

Значение, возвращаемое для этого столбца, отличается от значения, возвращаемого для столбца IS_NULLABLE. Столбец NULLABLE указывает на то, что столбец может принимать NULLs, но не может указывать с уверенностью, что столбец не принимает NULLs. Столбец IS_NULLABLE указывает на то, что столбец не может принимать NULLs, но не может указывать с уверенностью, что столбец принимает NULLs.
ПРИМЕЧАНИЯ (ODBC 1.0) 12 Varchar Описание столбца.
COLUMN_DEF (ODBC 3.0) 13 Varchar Значение по умолчанию для столбца. Значение в этом столбце должно интерпретироваться как строка, если она заключена в кавычки.

Если значение NULL было указано в качестве значения по умолчанию, этот столбец является словом NULL, а не заключено в кавычки. Если значение по умолчанию не может быть представлено без усечения, этот столбец содержит TRUNCATED, не заключая одинарные кавычки. Если значение по умолчанию не указано, этот столбец имеет значение NULL.

Значение COLUMN_DEF можно использовать при создании нового определения столбца, за исключением случаев, когда он содержит значение TRUNCATED.
SQL_DATA_TYPE (ODBC 3.0) 14 Smallint, не NULL Тип данных SQL, как он отображается в поле записи SQL_DESC_TYPE в IRD. Это может быть тип данных ODBC SQL или тип данных SQL для конкретного драйвера. Этот столбец совпадает с столбцом DATA_TYPE, за исключением типов данных datetime и интервала. Этот столбец возвращает неконкционный тип данных (например, SQL_DATETIME или SQL_INTERVAL), а не краткий тип данных (например, SQL_TYPE_DATE или SQL_INTERVAL_YEAR_TO_MONTH) для типов данных datetime и интервала. Если этот столбец возвращает SQL_DATETIME или SQL_INTERVAL, то определенный тип данных можно определить из столбца SQL_DATETIME_SUB. Список допустимых типов данных ODBC SQL см . в разделе "Типы данных SQL" в приложении D: Типы данных. Сведения о типах данных SQL для конкретного драйвера см. в документации по драйверу.

Типы данных, возвращаемые для ODBC 3.x и ODBC 2.Приложения x могут отличаться. Дополнительные сведения см. в разделе "Обратная совместимость" и "Соответствие стандартам".
SQL_DATETIME_SUB (ODBC 3.0) 15 Smallint Код подтипа для типов данных datetime и интервала. Для других типов данных этот столбец возвращает значение NULL. Дополнительные сведения о подкодах даты и интервала см. в разделе "SQL_DESC_DATETIME_INTERVAL_CODE" в SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Целое Максимальная длина в байтах столбца типа данных символа или двоичного типа данных. Для всех других типов данных этот столбец возвращает значение NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Integer, не NULL Порядковый номер столбца в таблице. Первый столбец в таблице — число 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar Значение NO, если столбец не содержит NULLs.

Значение "ДА", если столбец может включать NULLs.

Если допустимость значения NULL неизвестна, то этот столбец возвращает строку нулевой длины.

Допустимость значений NULL определяется в соответствии с правилами ISO. СУБД, совместимая с ISO SQL, не может вернуть пустую строку.

Значение, возвращаемое для этого столбца, отличается от значения, возвращаемого для столбца NULLABLE. (См. описание столбца NULLABLE.)

Пример кода

В следующем примере приложение объявляет буферы для результирующий набор, возвращаемый SQLColumns. Он вызывает SQLColumns для возврата результирующий набор, описывающий каждый столбец в таблице EMPLOYEE. Затем он вызывает SQLBindCol , чтобы привязать столбцы в результирующем наборе к буферам. Наконец, приложение извлекает каждую строку данных с помощью SQLFetch и обрабатывает ее.

// 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;  
        */  
      }  
   }  
}  
Сведения Раздел
Привязка буфера к столбцу в результирующем наборе Функция SQLBindCol
Отмена обработки инструкций Функция SQLCancel
Возврат привилегий для столбца или столбца Функция SQLColumnPrivileges
Получение блока данных или прокрутка результирующий набор Функция SQLFetchScroll
Получение нескольких строк данных Функция SQLFetch
Возврат столбцов, однозначно определяющих строку или столбцы, автоматически обновляемые транзакцией. Функция SQLSpecialColumns
Возврат статистики и индексов таблицы Функция SQLStatistics
Возврат списка таблиц в источнике данных Функция SQLTables
Возврат привилегий для таблицы или таблиц Функция SQLTablePrivileges

См. также

Справочник по API ODBC
Файлы заголовков ODBC