一致性
推出版本:ODBC 1.0 标准合规性:开放组
总结
SQLColumns 返回指定表中的列名列表。 驱动程序将这些信息作为指定 StatementHandle 的结果集返回。
Syntax
SQLRETURN SQLColumns(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Arguments
StatementHandle
[输入]语句句柄。
CatalogName
[输入]目录名称。 如果驱动程序支持某些表的目录,而不支持其他表,例如当驱动程序从不同数据库管理系统检索数据时,空字符串(“”)表示没有目录的表。
目录名称 不能包含字符串搜索模式。
注释
如果SQL_ATTR_METADATA_ID语句属性设置为SQL_TRUE,目录 名 被视为标识符,其大小写不重要。 如果是SQL_FALSE,目录 名称 是一个普通的论证;它被字面处理,且其案例意义重大。 有关详细信息,请参阅目录函数中的参数。
NameLength1
[输入]*目录名称字符长度。
架构名称
[输入]模式名称的字符串搜索模式。 如果驱动程序支持某些表的模式,但不支持其他表,例如当驱动程序从不同数据库管理系统检索数据时,空字符串(“”)表示那些没有模式的表。
注释
如果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的字符长度。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。
诊断
当 SQLColumns 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值,Handle 为 SQL_HANDLE_STMT,Handle 为 StatementHandle。 下表列出了 SQLColumns 通常返回的SQLSTATE值,并在此函数的上下文中解释了每个值;“(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。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。 |
| HY001 | 内存分配错误 | 驱动程序无法分配支持执行或完成函数所需的内存。 |
| HY008 | 操作已取消 | 为 StatementHandle 启用了异步处理。 调用了该函数,在完成执行之前,对 StatementHandle 调用了 SQLCancel 或 SQLCancelHandle。 然后,在 StatementHandle 上再次调用该函数。 调用了函数,在完成执行之前,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) 为与 StatementHandle 关联的连接句柄调用异步执行函数。 当调用 SQLColumns 函数时,该异步函数仍在执行。 (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect 或 SQLMoreResults,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。 (DM) 为 StatementHandle 调用异步执行函数(而不是此函数),并在调用此函数时仍在执行。 (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect、SQLBulkOperations 或 SQLSetPos,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。 |
| HY013 | 内存管理错误 | 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。 |
| HY090 | 字符串或缓冲区长度无效 | (DM) 其中一个名称长度参数的值小于0但不等于SQL_NTS。 |
| 其中一个名称长度参数的值超过了对应目录或名称的最大长度值。 每个目录或名称的最大长度可以通过调用 SQLGetInfo 并使用 信息类型 值获得。 (请参阅“注释”。 | ||
| HY117 | 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 | (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数。 |
| 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 返回。
一些 SQLStatistics 可以返回的列,但 SQLColumn无法返回。 例如, SQLColumns 不会返回通过表达式或过滤器创建的索引中的列,例如 SALARY + BENEFITS 或 DEPT = 0012。
VARCHAR列的长度未在表格中显示;实际长度取决于数据来源。 为了确定TABLE_CAT、TABLE_SCHEM、TABLE_NAME和COLUMN_NAME列的实际长度,应用程序可以调用带有SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN和SQL_MAX_COLUMN_NAME_LEN选项的 SQLGetInfo 。
以下栏目已更名为ODBC 3。x。 列名的更改不会影响向后兼容,因为应用程序按列号绑定。
| ODBC 2.0 列 | ODBC 3。x 列 |
|---|---|
| TABLE_QUALIFIER (表格限定符) | TABLE_CAT |
| 表所有者 | TABLE_SCHEM |
| PRECISION | 列大小 |
| 长度 | BUFFER_LENGTH |
| 规模 | 小数位数 |
| 基数 | 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)之外的其他列。 应用程序应从结果集的末尾倒计时,而不是指定显式序号位置来访问特定于驱动程序的列。 有关详细信息,请参阅 目录函数返回的数据。
| 列名称 | 列 number |
数据类型 | Comments |
|---|---|---|---|
| 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 数据类型。 对于日期时间和区间数据类型,该列返回简明数据类型(如SQL_TYPE_DATE或SQL_INTERVAL_YEAR_TO_MONTH,而非非简洁数据类型如SQL_DATETIME或SQL_INTERVAL)。 有关有效 ODBC SQL 数据类型的列表,请参阅 附录 D 中的 SQL 数据类型 :数据类型。 有关特定于驱动程序的 SQL 数据类型的信息,请参阅驱动程序的文档。 ODBC 3 的数据类型返回。x 和ODBC 2。x 应用可能有所不同。 有关详细信息,请参阅向后兼容性和标准符合性。 |
| TYPE_NAME(ODBC 1.0) | 6 | Varchar 非 NULL | 数据源相关数据类型名称;例如,“CHAR”、“VARCHAR”、“MONEY”、“LONG VARBINAR”或“CHAR( )用于比特数据”。 |
| 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:数据类型中的 列大小、十进制数字、传输八重奏长度和显示大小 。 对于不适用DECIMAL_DIGITS的数据类型,返回NULL。 |
| NUM_PREC_RADIX(ODBC 1.0) | 10 | Smallint | 对于数值数据类型,为 10 或 2。 如果是10,COLUMN_SIZE和DECIMAL_DIGITS中的数值给出该列允许的十进制数字。 例如,DECIMAL(12,5) 列将返回 10 的NUM_PREC_RADIX,COLUMN_SIZE为 12,DECIMAL_DIGITS为 5;FLOAT 列可以返回 10 的NUM_PREC_RADIX、15 COLUMN_SIZE和 NULL 的DECIMAL_DIGITS。 如果是2,COLUMN_SIZE和DECIMAL_DIGITS中的值给出列中允许的位数。 例如,一个 FLOAT 列可以返回 RADIX 为 2,COLUMN_SIZE 为 53,DECIMAL_DIGITS为 NULL。 对于不适用NUM_PREC_RADIX的数据类型,返回 NULL。 |
| NULLABLE(ODBC 1.0) | 11 | Smallint(非 NULL) | SQL_NO_NULLS列不能包含空值。 SQL_NULLABLE列是否接受NULL值。 如果不知道列是否接受 NULL 值,则SQL_NULLABLE_UNKNOWN。 该列返回的值与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 数据类型,正如 IRD SQL_DESC_TYPE 记录字段中所示。 这可以是 ODBC SQL 数据类型或特定于驱动程序的 SQL 数据类型。 此列与DATA_TYPE列相同,日期/时间和间隔数据类型除外。 该列返回非简明数据类型(如 SQL_DATETIME 或 SQL_INTERVAL),而非 datetime 和区间数据类型的简明数据类型(如 SQL_TYPE_DATE 或 SQL_INTERVAL_YEAR_TO_MONTH)。 如果该列返回SQL_DATETIME或SQL_INTERVAL,则可从SQL_DATETIME_SUB列确定具体数据类型。 有关有效 ODBC SQL 数据类型的列表,请参阅 附录 D 中的 SQL 数据类型 :数据类型。 有关特定于驱动程序的 SQL 数据类型的信息,请参阅驱动程序的文档。 ODBC 3 的数据类型返回。x 和ODBC 2。x 应用可能有所不同。 有关详细信息,请参阅向后兼容性和标准符合性。 |
| SQL_DATETIME_SUB (ODBC 3.0) | 15 | Smallint | 日期/时间数据类型和间隔数据类型的子类型代码。 对于其他数据类型,此列返回 NULL。 有关日期时间和区间子代码的更多信息,请参见 SQLSetDescField 中的“SQL_DESC_DATETIME_INTERVAL_CODE”。 |
| CHAR_OCTET_LENGTH (ODBC 3.0) | 16 | 整数 | 字符或二进制数据类型列的最大长度(以字节为单位)。 对于所有其他数据类型,此列返回 NULL。 |
| ORDINAL_POSITION (ODBC 3.0) | 17 | 整数不为 NULL | 表格中列的序数位置。 表格的第一列是数字1。 |
| IS_NULLABLE (ODBC 3.0) | 18 | Varchar | 如果列不包含 NULL,则为“否”。 如果列可以包含NULL,则表示“是”。 如果为 Null 性为未知,该列将返回零长度字符串。 根据 ISO 规则确定为 Null 性。 符合 ISO SQL 的 DBMS 无法返回空字符串。 该列返回的值与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 函数 |