SQLColumns 函式

符合性
推出版本: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);  

論點

StatementHandle
[輸入]語句句柄。

目錄名稱
[輸入]目錄名稱。 若驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有目錄的資料表。 目錄名稱 不能包含字串搜尋模式。

Note

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,目錄 名稱 被視為識別碼,其大小寫不重要。 如果是SQL_FALSE,目錄 名稱 是一個普通的參數;它被字面上處理,且其案例意義重大。 如需詳細資訊,請參閱目錄函式中的引數

名稱長度1
[輸入]*目錄名稱的字元長度。

結構描述名稱
[輸入]結構名稱的字串搜尋模式。 若驅動程式支援某些資料表的結構,但不支援其他資料表,例如從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有結構的資料表。

Note

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,SchemaName 被視為識別碼,其情況不重要。 若為 SQL_FALSE,SchemaName 是一個模式值參數;它被字面上處理,且其案例意義重大。

名稱長度2
[輸入]*SchemaName.

TableName
[輸入]表格名稱的字串搜尋模式。

Note

若 SQL_ATTR_METADATA_ID 陳述句屬性設為 SQL_TRUE,TableName 被視為識別碼,其大小寫不具意義。 如果是 SQL_FALSE,TableName 是一個模式值參數;它被字面上處理,且其案例意義重大。

名稱長度3
[輸入]*TableName 字元長度。

ColumnName
[輸入]欄位名稱的字串搜尋模式。

Note

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,ColumnName 被視為識別碼,其大小寫不重要。 如果是 SQL_FALSE,ColumnName 是一個模式值參數;它被字面上處理,且其案例意義重大。

NameLength4
[輸入]*欄位名稱的字元長度。

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

Diagnostics

SQLColumns 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可以透過呼叫 SQLGetDiagRec 並設定 HandleType(SQL_HANDLE_STMT)及 Handle(StatementHandle)來取得相應的 SQLSTATE 值。 下表列出 SQLColumns 通常回傳的 SQLSTATE 值,並在此函式的情境中說明每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 說明
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結故障 驅動程式與驅動程式連線的數據源之間的通訊連結在函式完成處理之前失敗。
24000 無效的數據指標狀態 StatementHandle 上開啟游標,並呼叫了 SQLFetchSQLFetchScroll。 如果 SQLFetch 或 SQLFetchScroll 尚未傳回SQL_NO_DATA,而且如果 SQLFetch SQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

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

呼叫函式,並在完成執行之前,從多線程應用程式中的不同線程呼叫語句Handle 或 SQLCancelHandle
HY009 無效的 Null 指標使用 SQL_ATTR_METADATA_ID 陳述屬性設為 SQL_TRUE,CatalogName 參數為空指標,SQL_CATALOG_NAME InfoType 回傳支援目錄名稱。

(DM) SQL_ATTR_METADATA_ID 陳述式屬性設為 SQL_TRUE,而 SchemaNameTableNameColumnName 的參數為空指標。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當 SQLColumns 函式被呼叫時,這個非同步函式仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLMoreResults,並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有數據流參數的數據之前,會呼叫此函式。

(DM) 呼叫 StatementHandle 的異步執行函式(而非此函式),並在呼叫此函式時仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,並傳回SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY090 無效的字串或緩衝區長度 (DM) 其中一個名稱長度參數的值小於 0,但不等於 SQL_NTS。
其中一個名稱長度參數的值超過了對應目錄或名稱的最大長度值。 每個目錄或名稱的最大長度可透過呼叫 SQLGetInfo 並輸入 InfoType 值來取得。 (請參閱“批注”。)
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 可用於擷取 SQLTables 回傳的各種項目資料。 除了基底資料表外,這還可能包括(但不限於)檢視表、同義詞、系統資料表等等。 相較之下, SQLColAttributeSQLDescribeCol 這兩個函式描述結果集中的欄位,而 SQLNumResultCols 函式則回傳結果集中的欄位數。 如需進一步資訊,請參閱目錄資料使用方式

Note

欲了解更多關於 ODBC 目錄函式的一般用途、參數及回傳資料,請參見 目錄函式。

SQLColumns 會以標準結果集的形式回傳結果,依TABLE_CAT、TABLE_SCHEM、TABLE_NAME 和 ORDINAL_POSITION 排序。

Note

當應用程式能與 ODBC 2 相容時,x 驅動程式,結果集中沒有回傳 ORDINAL_POSITION 欄位。 因此,在使用 ODBC 2 時,x 驅動程式 中, SQLColumns 回傳的欄位清單中欄位順序不一定與應用程式對該資料表中所有欄位執行 SELECT 陳述式時回傳的欄位順序相同。

Note

SQLColumns 可能不會回傳所有欄位。 例如,驅動程式可能不會回傳偽欄位的資訊,例如 Oracle ROWID。 應用程式可以使用任何有效的欄位,無論該欄位是否由 SQLColumns 回傳。

有些 SQLStatistics 可回傳的欄位, SQLColum 則無法回傳。 例如, 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_QUALIFIER (表格限定詞) TABLE_CAT
表擁有者 TABLE_SCHEM
PRECISION 欄位大小
長度 緩衝區長度
規模 小數位數
基數 NUM_PREC_RADIX

以下欄位已新增至 SQLColumns 為 ODBC 3 回傳的結果集。x

字元位元組長度
COLUMN_DEF

IS_NULLABLE
ORDINAL_POSITION

SQL_資料類型
SQL_DATETIME_SUB

下表列出結果集中的欄位。 驅動程式可定義第18欄(IS_NULLABLE)之外的其他欄位。 應用程式應透過從結果集末端倒數,而非指定明確的序數位置,從而取得驅動程式專屬欄位的存取權。 欲了解更多資訊,請參閱 目錄函數回傳的資料

欄位名稱 Column

編號
資料類型 評論
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 不是 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 ( ) for bit data」。
COLUMN_SIZE(ODBC 1.0) 7 Integer 若DATA_TYPE為SQL_CHAR或SQL_VARCHAR,則該欄包含該欄的最大字元長度。 對於 datetime 資料型別,這是將該值轉換為字元時顯示所需的總字元數。 對於數字資料型態,這要麼是根據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) 數據行會傳回 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 欄位可以回傳 RADIX 為 2,COLUMN_SIZE為 53,DECIMAL_DIGITS為 NULL。

null 會針對不適用NUM_PREC_RADIX的數據類型傳回。
可消除(ODBC 1.0) 11 Smallint 不是 NULL SQL_NO_NULLS欄位無法包含 NULL 值。

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數據行相同,但 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。 欲了解更多關於日期時間與區間子碼的資訊,請參閱 SQLSetDescField 中的「SQL_DESC_DATETIME_INTERVAL_CODE」。
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Integer 字元或二進位數據類型數據行的位元組長度上限。 對於所有其他數據類型,這個數據行會傳回NULL。
ORDINAL_POSITION (ODBC 3.0) 17 整數不是 NULL 欄位在表格中的序數位置。 表格的第一欄是編號 1。
IS_NULLABLE (ODBC 3.0) 18 Varchar 如果數據行不包含 NULL,則為 「NO」。。

如果欄位可以包含 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 函式