分享方式:


SQLColumns 函式

一致性
引進的版本:ODBC 1.0 標準合規性:開放群組

摘要
SQLColumns 會傳回指定資料表中的資料行名稱清單。 驅動程式會在指定的 StatementHandle 上傳回這項資訊作為結果集。

語法

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

引數

StatementHandle
[輸入]語句控制碼。

CatalogName
[輸入]目錄名稱。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有目錄的資料表。 CatalogName 不能包含字串搜尋模式。

注意

如果 SQL_ATTR_METADATA_ID 語句屬性設定為 SQL_TRUE, 則 CatalogName 會被視為識別碼,而且其大小寫並不重要。 如果它是SQL_FALSE, CatalogName 是一般引數;它會以常值方式處理,而且其大小寫很重要。 如需詳細資訊,請參閱目錄函式中的引數

NameLength1
[輸入]*CatalogName 字元長度。

SchemaName
[輸入]架構名稱的字串搜尋模式。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有架構的資料表。

注意

如果 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時,可以呼叫 SQLGetDiagRec 搭配 SQL_HANDLE_STMT 的 HandleType StatementHandle 來取得相關聯的 SQLSTATE 值。 下表列出 SQLColumns 通常傳 回的 SQLSTATE 值,並說明此函式內容中的每個值;標記法 「(DM)」 在驅動程式管理員傳回的 SQLSTATE 描述之前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結失敗 驅動程式與驅動程式連線的資料來源之間的通訊連結在函式完成處理之前失敗。
24000 不正確資料指標狀態 已開啟 StatementHandle 上的 資料指標,並 已呼叫 SQLFetch SQLFetchScroll 。 如果 SQLFetch 或 SQLFetchScroll 尚未傳回SQL_NO_DATA,而且如果 SQLFetch SQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

語句上已開啟 資料指標,但 未呼叫 SQLFetch SQLFetchScroll
40001 序列化失敗 交易因為與另一個交易發生資源死結而回復。
40003 語句完成未知 此函式執行期間相關聯的連接失敗,且無法判斷交易的狀態。
HY000 一般錯誤 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec 回的錯誤訊息描述錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY008 作業已取消 已針對 StatementHandle 啟用非同步處理。 已呼叫函式,並在完成執行之前, 在 StatementHandle 上 呼叫 SQLCancel SQLCancelHandle 。 然後在 StatementHandle 再次呼叫函式。

呼叫函式,並在完成執行之前, 從多執行緒應用程式中的不同執行緒呼叫 語句Handle 或 SQLCancelHandle
HY009 不正確 Null 指標使用 SQL_ATTR_METADATA_ID語句屬性已設定為 SQL_TRUE、 CatalogName 引數為 null 指標,而且 infoType SQL_CATALOG_NAME 會傳回支援目錄名稱。

(DM) SQL_ATTR_METADATA_ID語句屬性設定為 SQL_TRUE, 而 SchemaName、 TableName ColumnName 引數為 null 指標。
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。
其中一個名稱長度引數的值超過對應目錄或名稱的最大長度值。 使用 InfoType 值呼叫 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 ,才能執行後續處理並完成作業。

註解

在語句執行之前,通常會使用此函式,從資料來源目錄擷取資料表或資料表的資料行相關資訊。 SQLColumns 可用來擷取 SQLTable 傳回之所有類型的專案的資料。 除了基表以外,這可能包括(但不限於)檢視、同義字、系統資料表等等。 相較之下,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 傳回。

SQLColumns 不會傳 回某些可由 SQLStatistics 傳回 的資料行。 例如, 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_OWNER TABLE_SCHEM
PRECISION COLUMN_SIZE
LENGTH BUFFER_LENGTH
SCALE 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)。 應用程式應該從結果集結尾倒數,而不是指定明確的序數位置,來存取驅動程式特定的資料行。 如需詳細資訊,請參閱 目錄函 式傳回的資料。

資料行名稱 資料行

數值
資料類型 註解
TABLE_CAT (ODBC 1.0) 1 Varchar 目錄名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有目錄的資料表傳回空字串 (「」)。
TABLE_SCHEM (ODBC 1.0) 2 Varchar 架構名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有架構的資料表傳回空字串 (「」)。
TABLE_NAME (ODBC 1.0) 3 Varchar not Null 資料表名稱。
COLUMN_NAME (ODBC 1.0) 4 Varchar not Null 資料行名稱。 驅動程式會針對沒有名稱的資料行傳回空字串。
DATA_TYPE (ODBC 1.0) 5 Smallint not Null SQL 資料類型。 這可以是 ODBC SQL 資料類型或驅動程式特定的 SQL 資料類型。 對於 datetime 和 interval 資料類型,此資料行會傳回精簡的資料類型(例如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 not 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 整數 如果指定SQL_C_DEFAULT,則為在 SQLGetData、SQLFetch 或 SQLFetchScroll 作業上傳輸的資料長度,以位元組為單位。 對於數值資料,此大小可能與儲存在資料來源上的資料大小不同。 此值可能與字元資料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) 資料行會傳回 10 的NUM_PREC_RADIX、12 的COLUMN_SIZE,以及 5 的DECIMAL_DIGITS;FLOAT 資料行可以傳回 10 的NUM_PREC_RADIX、15 的COLUMN_SIZE,以及 Null 的DECIMAL_DIGITS。

如果是 2,COLUMN_SIZE 中的值,DECIMAL_DIGITS提供資料行中允許的位數。 例如,FLOAT 資料行可以傳回 2 的 RADIX、53 的COLUMN_SIZE,以及 Null 的DECIMAL_DIGITS。

null 會針對不適用NUM_PREC_RADIX的資料類型傳回。
NullABLE (ODBC 1.0) 11 Smallint not Null 如果資料行不能包含 Null 值,SQL_NO_NullS。

如果資料行接受 Null 值,SQL_NullABLE。

如果不知道資料行是否接受 Null 值,SQL_NullABLE_UNKNOWN。

針對此資料行傳回的值與針對IS_NullABLE資料行傳回的值不同。 NullABLE 資料行會確定資料行可以接受 NUL,但無法確定資料行不接受 NUL。 IS_NullABLE資料行會確定資料行無法接受 NUL,但無法確定資料行接受 NUL。
備註 (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 not Null SQL 資料類型,如同它出現在 IRD 中SQL_DESC_TYPE記錄欄位。 這可以是 ODBC SQL 資料類型或驅動程式特定的 SQL 資料類型。 此資料行與DATA_TYPE資料行相同,但 datetime 和 interval 資料類型除外。 此資料行會傳回非連續資料類型(例如SQL_DATETIME或SQL_INTERVAL),而不是日期時間和間隔資料類型的精簡資料類型(例如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 datetime 和 interval 資料類型的子類型程式碼。 對於其他資料類型,這個資料行會傳回 Null。 如需 datetime 和 interval 副程式代碼的詳細資訊,請參閱 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,則為 「NO」。

如果資料行可能包含 Null,則為 「YES」。

如果 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 函式

另請參閱

ODBC API 參考
ODBC 標頭檔