Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Соответствие
Введенная версия: Соответствие стандартам ODBC 1.0: Open Group
Сводка
SQLColumns возвращает список имён столбцов в заданных таблицах. Драйвер возвращает эту информацию в виде результата, установленного на указанном StatementHandle.
Syntax
SQLRETURN SQLColumns(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Arguments
ОператорHandle
[Входные данные] Дескриптор инструкции.
Имя каталога
[Входные данные] Имя каталога. Если драйвер поддерживает каталоги для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, пустая строка ("") указывает на те таблицы, в которых нет каталогов.
CatalogName не может содержать шаблон поиска по строкам.
Замечание
Если атрибут оператора SQL_ATTR_METADATA_ID установлен в SQL_TRUE, CatalogName рассматривается как идентификатор, и его падеж не является значимым. Если это 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 является аргументом значения шаблона; он обрабатывается буквально, и его дело является значительным.
НазваниеДлина4
[Входные данные] Длина символов *ColumnName.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR или SQL_INVALID_HANDLE.
Diagnostics
Когда SQLColumns возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, соответствующее значение SQLSTATE можно получить, вызвав SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и Handleof StatementHandle. В следующей таблице перечислены значения SQLSTATE, обычно возвращаемые SQLColumns , и каждое из них объясняется в контексте этой функции; обозначение «(DM)» предшествует описаниям SQLSTATE, возвращаемым менеджером драйверов. Возвращаемый код, связанный с каждым значением 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. Курсор был открыт на StatementHandle , но 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 был null-указателем. |
| 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 должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции. |
Comments
Эта функция обычно используется до выполнения оператора для получения информации о столбцах таблицы или таблиц из каталога источника данных. 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.
Некоторые столбцы, которые могут быть возвращены SQLStatics , не возвращаются SQLColumns. Например, SQLColumns не возвращает столбцы в индексе, созданном над выражением или фильтром, таким как SALARY + BENEFITS или 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_CAT |
| владелец таблицы | TABLE_SCHEM |
| PRECISION | РАЗМЕР_СТОЛБЦА |
| ДЛИНА | длина буфера |
| ШКАЛА | десятичные цифры |
| КОРЕНЬ | NUM_PREC_RADIX |
Следующие столбцы были добавлены в набор результатов, возвращаемый SQLColumns для ODBC 3. x:
CHAR_OCTET_LENGTH
КОЛОНКА_ОПРЕДЕЛЕНИЕ
IS_NULLABLE
ORDINAL_POSITION
Тип_Данных_SQL
SQL_DATETIME_SUB
В следующей таблице перечислены столбцы в результирующем наборе. Драйвер может определить дополнительные столбцы за пределами столбца 18 (IS_NULLABLE). Приложение должно получить доступ к столбцам для конкретного драйвера, отсчитывая от конца результирующего набора вместо указания явной порядковой позиции. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".
| Название столбца | Column number |
Тип данных | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Название каталога; NULL, если это не применимо к источнику данных. Если драйвер поддерживает каталоги для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, в которых нет каталогов. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Название схемы; NULL, если это не применимо к источнику данных. Если драйвер поддерживает схемы для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, в которых нет схем. |
| TABLE_NAME (ODBC 1.0) | 3 | Варчар, а не NULL | Имя таблицы. |
| COLUMN_NAME (ODBC 1.0) | 4 | Варчар, а не NULL | Имя столбца. Драйвер возвращает пустую строку для столбца, который не имеет имени. |
| DATA_TYPE (ODBC 1.0) | 5 | Smallint, не NULL | Тип данных SQL. Это может быть тип данных ODBC SQL или тип данных SQL для конкретного драйвера. Для типов данных, времени и интервалов, этот столбец возвращает краткий тип данных (например, 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 | Варчар, а не NULL | Имя типа данных, зависящее от источника данных; например, «CHAR», «VARCHAR», «MONEY», «LONG VARBINAR» или «CHAR ( ) ДЛЯ БИТОВЫХ ДАННЫХ». |
| COLUMN_SIZE (ODBC 1.0) | 7 | Integer | Если DATA_TYPE SQL_CHAR или SQL_VARCHAR, этот столбец содержит максимальную длину символов столбца. Для типов данных времени времени это общее количество символов, необходимых для отображения значения при преобразовании в символы. Для числовых типов данных это либо общее количество цифр, либо общее количество разрешённых битов в столбце согласно столбцу NUM_PREC_RADIX. Для типов интервальных данных это количество символов в представлении символа интервального литерала (как определено по точности интервала, см. Длина интервального типа данных в Приложении D: Типы данных). Дополнительные сведения см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных. |
| BUFFER_LENGTH (ODBC 1.0) | 8 | Integer | Длина в байтах данных, передаваемых на операции 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 с уверенностью показывает, что столбец может принимать NULL, но не может с уверенностью указывать, что столбец не принимает NULL. Столбец IS_NULLABLE с уверенностью указывает, что столбец не может принимать NULL, но не может с уверенностью указывать, что столбец принимает NULL. |
| ЗАМЕЧАНИЯ (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 и interval data. Если этот столбец возвращает 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. Для получения дополнительной информации о подкодах datetime и interval см. «SQL_DESC_DATETIME_INTERVAL_CODE» в SQLSetDescField. |
| CHAR_OCTET_LENGTH (ODBC 3.0) | 16 | Integer | Максимальная длина в байтах столбца типа данных символа или двоичного типа данных. Для всех других типов данных этот столбец возвращает значение NULL. |
| ORDINAL_POSITION (ODBC 3.0) | 17 | Целое число не NULL | Порядковое положение столбца в таблице. Первый столбец в таблице — это номер 1. |
| IS_NULLABLE (ODBC 3.0) | 18 | Varchar | Значение NO, если столбец не содержит NULLs. «ДА», если в колонке могут быть NULL. Если допустимость значения 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 |
| Возврат статистики и индексов таблиц | Функция SQLStatistic |
| Возврат списка таблиц в источнике данных | Функция SQLTables |
| Возврат привилегий для стола или таблиц | Функция SQLTablePrivileges |