共用方式為


TN042: ODBC 驅動程式開發人員的建議事項

注意事項注意事項

由於它第一次線上文件中包含尚未更新下列技術提示。如此一來,某些程序和主題可能已經過期或不正確。如需最新資訊,建議您先搜尋線上文件索引中有興趣的主題。

這個註解會描述供 ODBC 驅動程式撰寫方針。 它簡述一般的需求和假設 ODBC 功能使 MFC 資料庫類別,以及各種預期的語意詳細資料。 所需的驅動程式的功能,以支援三種CRecordset開啟模式 (forwardOnly快照集的動態集中) 所述。

ODBC 的資料指標程式庫

MFC 資料庫類別會提供功能給使用者超過大多數的層級 1 ODBC 驅動程式所提供的功能,在許多情況下。 所幸,ODBC 的資料指標程式庫層本身之間的資料庫類別和驅動程式,而且會自動提供了豐富的這項額外的功能。

舉個例說,大多數 1.0 的驅動程式不支援向後捲動。 資料指標程式庫可以偵測這點,並將快取中的驅動程式的資料列和簡報的方式依要求在 FETCH_PREV 中的呼叫 SQLExtendedFetch

另一個重要的例子,資料指標程式庫相依性是定位的更新。 大多數的 1.0 驅動程式也沒有定位的更新,但資料指標程式庫就會產生 update 陳述式用來識別目標資料列根據其目前的快取的資料值或快取的時間戳記值的資料來源上。

類別庫會永遠不會利用多個資料列集。 因此,那幾個 SQLSetPos 陳述式會自動套用到列 1 的資料列集。

CDatabases

每個CDatabase配置會有一個 HDBC。 (如果CDatabaseExecuteSQL使用函式時, 的 HSTMT 會暫時配置。)因此,如果有多個CDatabase的需要,多個 HDBCs 每個 HENV 必須支援此模式。

資料庫類別會要求資料指標程式庫。 這會反映在 SQLSetConnections 呼叫 SQL_ODBC_CURSORSSQL_CUR_USE_ODBC

SQLDriverConnectSQL_DRIVER_COMPLETECDatabase::Open來建立資料來源的連接。

驅動程式必須支援 SQLGetInfoSQL_ODBC_API_CONFORMANCE > = SQL_OAC_LEVEL1SQLGetInfoSQL_ODBC_SQL_CONFORMANCE > = SQL_OSC_MINIMUM

為了讓交易可支援CDatabase和其相依資料錄集, SQLGetInfoSQL_CURSOR_COMMIT_BEHAVIORSQL_CURSOR_ROLLBACK_BEHAVIOR 必須要有 SQL_CR_PRESERVE。 否則,嘗試執行交易控制將被忽略。

SQLGetInfoSQL_DATA_SOURCE_READ_ONLY 必須支援此模式。 如果它傳回"Y",將資料來源上不執行任何 update 作業。

如果CDatabase開啟成唯讀,就嘗試設定資料來源讀取只會與進行 SQLSetConnectOptionSQL_ACCESS_MODESQL_MODE_READ_ONLY

如果識別項需要加註引號於,這項資訊應該會傳回從驅動程式和 SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR 呼叫。

進行偵錯, SQLGetInfo SQL_DBMS_VERSQL_DBMS_NAME 擷取驅動程式。

SQLSetStmtOptionSQL_QUERY_TIMEOUTSQL_ASYNC_ENABLE 可能會在呼叫CDatabaseHDBC

SQLError 可能會呼叫任何或所有的引數 NULL。

不用說, SQLAllocEnvSQLAllocConnectSQLDisconnectSQLFreeConnect 必須支援此模式。

ExecuteSQL

除了配置和清出暫存的 HSTMTExecuteSQL呼叫 SQLExecDirectSQLFetchSQLNumResultColSQLMoreResultsSQLCancel 可能會在呼叫的 HSTMT

GetDatabaseName

SQLGetInfoSQL_DATABASE_NAME 就會呼叫。

集指令,版本,復原

SQLSetConnectOptionSQL_AUTOCOMMITSQLTransactSQL_COMMITSQL_ROLLBACKSQL_AUTOCOMMIT 交易要求時,是否呼叫常式。

CRecordsets

SQLAllocStmtSQLPrepareSQLExecute (如開啟重新查詢), SQLExecDirect (適用於更新作業), SQLFreeStmt 必須支援此模式。 SQLNumResultColsSQLDescribeCol 時呼叫的結果集在不同的時候。

SQLSetParam 可廣泛地用參數的資料繫結和 DATA_AT_EXEC 功能。

SQLBindCol 可廣泛地用來註冊輸出使用 ODBC 的資料行資料儲存位置。

兩個 SQLGetData 呼叫用來擷取 SQL_LONG_VARCHARSQL_LONG_VARBINARY 的資料。 第一次呼叫會嘗試尋找的總長度資料行的值,藉由呼叫 SQLGetData cbMaxValue 為 0,而有效的 pcbValue。 如果保留 pcbValue SQL_NO_TOTAL,會擲回例外狀況。 否則, HGLOBAL配置時,和另一個 SQLGetData 就呼叫擷取整個結果。

Updating

如果要求封閉式鎖定時, SQLGetInfoSQL_LOCK_TYPES 需要查詢。 如果 SQL_LCK_EXCLUSIVE 是不受支援,例外狀況會擲回。

嘗試更新CRecordset (快照集的動態集中) 將會造成第二個 hstmt 存入配置。 不支援的驅動程式的第二個的 HSTMT,資料指標程式庫,以模擬這項功能。 不幸的是,這可能有時表示強制目前的查詢,第一天 hstmt 存入 完成之前先處理第二個 的 HSTMT要求時。

SQLFreeStmtSQL_CLOSESQL_RESET_PARAMSSQLGetCursorName 就會在更新作業期間呼叫。

如果有 CLongBinarysoutputColumns,ODBC 的 DATA_AT_EXEC 必須支援的功能。 這包括傳回 SQL_NEED_DATASQLExecDirectSQLParamDataSQLPutData

SQLRowCount 之後若要確認只有 1 的資料錄已更新的執行會呼叫 SQLExecDirect

ForwardOnly 資料指標

只有 SQLFetch移動作業。 請注意, forwardOnly 的資料指標不支援更新。

快照集資料指標

快照集功能需要 SQLExtendedFetch 支援。 如上文所述,不支援的驅動程式時,會偵測到 ODBC 資料指標程式庫 SQLExtendedFetch,並提供必要的支援本身。

SQLGetInfoSQL_SCROLL_OPTIONS 必須支援 SQL_SO_STATIC

動態資料指標

以下是開啟動態集所需的最小支援:

SQLGetInfoSQL_ODBC_VER 必須傳回 > "01"。

SQLGetInfoSQL_SCROLL_OPTIONS 必須支援 SQL_SO_KEYSET_DRIVEN

SQLGetInfoSQL_ROW_UPDATES 必須傳回"Y"。

SQLGetInfoSQL_POSITIONED_UPDATES 必須支援 SQL_PS_POSITIONED_DELETESQL_PS_POSITIONED_UPDATE

此外,如果要求封閉式鎖定時,呼叫 SQLSetPos irow 1、 fRefresh FALSE 與 fLock SQL_LCK_EXCLUSIVE 將會進行。

請參閱

其他資源

技術的備忘稿編號

依類別的技術注意事項